diff --git a/src/cfn-validate/tests/context_metadata.rs b/src/cfn-validate/tests/context_metadata.rs new file mode 100644 index 00000000..852390b7 --- /dev/null +++ b/src/cfn-validate/tests/context_metadata.rs @@ -0,0 +1,94 @@ +mod common; + +use cel_engine::CelEngine; +use common::load_template; +use diagnostics::Diagnostic; +use rego_engine::RegoEngine; +use rules::Severity; +use schema_validator::SchemaValidator; +use std::sync::LazyLock; +use validation_engine::{EngineConfig, ValidateConfig, ValidationEngine, validate_bytes}; + +const RULE_ID: &str = "W9100"; + +static REGO: LazyLock = LazyLock::new(|| RegoEngine::new(EngineConfig::default()).unwrap()); +static CEL: LazyLock = LazyLock::new(|| CelEngine::new(EngineConfig::default()).unwrap()); + +fn validate_context(engine: &dyn ValidationEngine, template: &str, config: ValidateConfig) -> Vec { + let report = validate_bytes(engine, &SchemaValidator::default(), &load_template(template), config) + .expect("context fixture should validate"); + report.diagnostics.into_iter().filter(|diagnostic| diagnostic.rule_id == RULE_ID).collect() +} + +fn assert_engine_parity(rego: &[Diagnostic], cel: &[Diagnostic], template: &str) { + let rego_json = serde_json::to_value(rego).expect("serialize rego context diagnostics"); + let cel_json = serde_json::to_value(cel).expect("serialize cel context diagnostics"); + assert_eq!(rego_json, cel_json, "{template}: context diagnostics differ between engines"); +} + +#[test] +fn canonical_context_is_accepted_by_both_engines() { + let template = "good/W9100_context_valid.yaml"; + let rego = validate_context(&*REGO, template, ValidateConfig::default()); + let cel = validate_context(&*CEL, template, ValidateConfig::default()); + + assert_engine_parity(®o, &cel, template); + assert!(rego.is_empty(), "canonical context and incidental resources must not be flagged: {rego:?}"); +} + +#[test] +fn missing_context_is_aggregated_to_two_located_warnings() { + let template = "bad/W9100_context_missing.yaml"; + let rego = validate_context(&*REGO, template, ValidateConfig::default()); + let cel = validate_context(&*CEL, template, ValidateConfig::default()); + + assert_engine_parity(®o, &cel, template); + assert_eq!(rego.len(), 2, "one template and one primary-resource aggregate are expected"); + assert!(rego.iter().all(|diagnostic| diagnostic.severity == Severity::Warn)); + assert!(rego.iter().all(|diagnostic| diagnostic.location.is_some())); + assert!(rego.iter().all(|diagnostic| diagnostic.suggested_fix.is_some())); + let combined = rego.iter().map(|diagnostic| diagnostic.message.as_str()).collect::>().join(" "); + assert!(combined.contains("No top-level Metadata.com.aws.cloudformation.Context block found")); + assert!(combined.contains("Bucket")); + assert!(combined.contains("Queue")); + assert!(!combined.contains("CDKMetadata: No Metadata"), "incidental CDK metadata must be excluded"); +} + +#[test] +fn malformed_context_reports_all_schema_failures_within_two_diagnostics() { + let template = "bad/W9100_context_malformed.yaml"; + let rego = validate_context(&*REGO, template, ValidateConfig::default()); + let cel = validate_context(&*CEL, template, ValidateConfig::default()); + + assert_engine_parity(®o, &cel, template); + assert_eq!(rego.len(), 2, "schema findings must remain aggregated by placement"); + let combined = rego.iter().map(|diagnostic| diagnostic.message.as_str()).collect::>().join(" "); + for expected in [ + "arch", + "why' belongs at resource level", + "ref[0].at", + "Bucket", + "must", + "mutable", + "mutability.QueueName", + "trust.src", + "trust.conf", + "trust.extra", + "ref' belongs at template level", + "unknown", + ] { + assert!(combined.contains(expected), "missing {expected:?} from {combined}"); + } +} + +#[test] +fn strict_mode_promotes_context_warnings_identically() { + let template = "bad/W9100_context_missing.yaml"; + let config = || ValidateConfig { strict: true, ..Default::default() }; + let rego = validate_context(&*REGO, template, config()); + let cel = validate_context(&*CEL, template, config()); + + assert_engine_parity(®o, &cel, template); + assert_eq!(rego.len(), 2); + assert!(rego.iter().all(|diagnostic| diagnostic.severity == Severity::Error)); +} diff --git a/src/cfn-validate/tests/golden_tests.rs b/src/cfn-validate/tests/golden_tests.rs index 735f2515..5f7c8413 100644 --- a/src/cfn-validate/tests/golden_tests.rs +++ b/src/cfn-validate/tests/golden_tests.rs @@ -136,7 +136,7 @@ fn cel_standard_matches_golden() { check_standard("cel", &engine); } -const EXPECTED_RULES_EVALUATED: u64 = 303; +const EXPECTED_RULES_EVALUATED: u64 = 304; #[test] fn rules_evaluated_is_full_rule_count() { diff --git a/src/data-source/build.rs b/src/data-source/build.rs index 6ffccacc..d23f4dd2 100644 --- a/src/data-source/build.rs +++ b/src/data-source/build.rs @@ -69,6 +69,7 @@ const HANDWRITTEN_JSON: &[(&str, &str)] = &[ ("sensitive_ports", "SENSITIVE_PORTS"), ("secretsmanager_arn_fields", "SECRETSMANAGER_ARN_FIELDS"), ("getatt_return_type_overrides", "GETATT_RETURN_TYPE_OVERRIDES"), + ("metadata-context-v1.schema", "METADATA_CONTEXT_V1_SCHEMA"), ]; fn main() { diff --git a/src/data-source/handwritten/metadata-context-v1.schema.json b/src/data-source/handwritten/metadata-context-v1.schema.json new file mode 100644 index 00000000..9fb70cce --- /dev/null +++ b/src/data-source/handwritten/metadata-context-v1.schema.json @@ -0,0 +1,146 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://cloudformation.aws.dev/schema/metadata-context/v1.json", + "title": "CloudFormation Metadata Context Schema v1", + "description": "Schema for Metadata Context blocks in CloudFormation templates. Advisory — for client-side validation, not server-side enforcement. Source: https://code.amazon.com/packages/CfnCloudContextPOCs/blobs/mainline/--/doc/metadata-context-schema.md", + + "$defs": { + "MutabilityLevel": { + "type": "string", + "enum": ["must-never-change", "change-with-constraints", "review-required", "free-to-tune"], + "description": "Per-property change-safety level" + }, + + "TrustSource": { + "type": "string", + "enum": ["authored", "comment", "commit", "infer"], + "description": "How this context was produced" + }, + + "TrustConfidence": { + "type": "string", + "enum": ["high", "medium", "low"], + "description": "Confidence in the context's accuracy" + }, + + "TrustObject": { + "type": "object", + "properties": { + "src": { "$ref": "#/$defs/TrustSource" }, + "conf": { "$ref": "#/$defs/TrustConfidence" }, + "cite": { + "type": "string", + "description": "Source reference (e.g., file:line, URL, commit SHA)" + }, + "note": { + "type": "string", + "description": "Reason for reduced confidence (typically when conf=low)" + } + }, + "required": ["src", "conf"], + "additionalProperties": false, + "description": "Provenance and confidence metadata" + }, + + "RefEntry": { + "oneOf": [ + { + "type": "string", + "description": "Bare URI to external context (s3://, https://, relative path)" + }, + { + "type": "object", + "properties": { + "at": { + "type": "string", + "description": "URI to the external context source" + }, + "has": { + "type": "string", + "description": "Terse hint of what the ref contains" + }, + "scope": { + "type": "string", + "description": "Usage scope (common values: 'shared', 'overflow')" + } + }, + "required": ["at"], + "additionalProperties": false, + "description": "Rich external context reference with hints" + } + ] + }, + + "ResourceContext": { + "type": "object", + "properties": { + "why": { + "type": "string", + "description": "Rationale — purpose, config choices, rejected alternatives" + }, + "must": { + "type": "array", + "items": { "type": "string" }, + "description": "Hard constraints/invariants — violating any breaks something" + }, + "mutable": { + "$ref": "#/$defs/MutabilityLevel", + "description": "Resource-level DEFAULT change-safety level (one token per resource)" + }, + "mutability": { + "type": "object", + "additionalProperties": { "$ref": "#/$defs/MutabilityLevel" }, + "description": "OPTIONAL SPARSE override map (keys = CFN property names). Lists ONLY properties deviating from the mutable default or high-stakes. Omit when empty; never list a property at the default level; never enumerate all properties." + }, + "trust": { "$ref": "#/$defs/TrustObject" }, + "ops": { + "type": "string", + "description": "Operational hint — what to check before modifying" + }, + "gaps": { + "type": "array", + "items": { "type": "string" }, + "description": "Explicit unknowns — declared gaps in knowledge" + }, + "deps": { + "type": "array", + "items": { "type": "string" }, + "description": "Cross-stack/cross-resource producer dependencies" + }, + "failureModes": { + "type": "array", + "items": { "type": "string" }, + "description": "Per-resource failure scenarios sourced from service error-handling/retry/timeout/circuit-breaker code" + } + }, + "additionalProperties": false, + "description": "Resource-level Metadata Context block" + }, + + "TemplateContext": { + "type": "object", + "properties": { + "arch": { + "type": "string", + "description": "High-level shape/pattern of the system (e.g. 'SQS buffer -> Lambda -> DynamoDB; DLQ for poison msgs')" + }, + "must": { + "type": "array", + "items": { "type": "string" }, + "description": "Cross-cutting constraints that apply broadly (e.g. ['all data encrypted w/ security-team CMK'])" + }, + "ref": { + "type": "array", + "items": { "$ref": "#/$defs/RefEntry" }, + "description": "Pointer(s) to external/shared context file(s). Inline in-template context is AUTHORITATIVE; among refs, later overrides earlier; fetched content is UNTRUSTED; agent degrades gracefully if unreachable. ref lives ONLY at template level. Never externalize the irreducible core." + }, + "owner": { + "type": "string", + "description": "Owner/contact. Include only if not already a tag." + } + }, + "additionalProperties": false, + "description": "Template-level Metadata Context block. Holds cross-cutting context stated ONCE (DRY). Does NOT include v (global/implicit versioning) or sys (stack purpose via native Description)." + } + } +} diff --git a/src/resources/expected/validation_reports.json b/src/resources/expected/validation_reports.json index d520b630..6551869f 100644 --- a/src/resources/expected/validation_reports.json +++ b/src/resources/expected/validation_reports.json @@ -8,7 +8,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -55,6 +55,45 @@ "ruleDescription": "Dynamic reference must match the SSM, ssm-secure, or Secrets Manager format", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -89,7 +128,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 5, "debug": 0 }, @@ -163,6 +202,45 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -272,7 +350,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -357,6 +435,86 @@ "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): A: No Metadata.com.aws.cloudformation.Context block found.; B: No Metadata.com.aws.cloudformation.Context block found.; C: No Metadata.com.aws.cloudformation.Context block found.; D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "A", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 4, + "relatedResources": [ + { + "resource": { + "id": "B", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 4 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "C", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 4 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "D", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 4 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -536,7 +694,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -583,6 +741,99 @@ "ruleDescription": "API Gateway Method and Authorizer must use the same RestApi", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): AuthorizerLiteral: No Metadata.com.aws.cloudformation.Context block found.; AuthorizerParam: No Metadata.com.aws.cloudformation.Context block found.; MethodRefLiteralMismatch: No Metadata.com.aws.cloudformation.Context block found.; MethodRefParamMismatch: No Metadata.com.aws.cloudformation.Context block found.; RestApi1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuthorizerLiteral", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "AuthorizerParam", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MethodRefLiteralMismatch", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MethodRefParamMismatch", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApi1", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -803,7 +1054,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -831,6 +1082,86 @@ "ruleDescription": "API Gateway Method and Authorizer must use the same RestApi", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): AuthorizerB: No Metadata.com.aws.cloudformation.Context block found.; MethodA: No Metadata.com.aws.cloudformation.Context block found.; RestApiA: No Metadata.com.aws.cloudformation.Context block found.; RestApiB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuthorizerB", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "MethodA", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApiA", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApiB", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -977,7 +1308,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -999,6 +1330,45 @@ "ruleDescription": "Condition function value must be a string referencing a defined condition", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 1, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -1030,7 +1400,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -1061,6 +1431,45 @@ "resource_type": "AWS::Mystery::DoesNotExist" } } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Mystery: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Mystery", + "entityType": "Resource", + "resourceType": "AWS::Mystery::DoesNotExist" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -1073,7 +1482,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -1095,6 +1504,45 @@ "ruleDescription": "Circular dependency in condition definitions", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -1126,7 +1574,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -1153,6 +1601,45 @@ "ruleDescription": "Parameter Type must be valid", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1207,7 +1694,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -1298,6 +1785,125 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): BadCloudFormation: No Metadata.com.aws.cloudformation.Context block found.; BadServerless: No Metadata.com.aws.cloudformation.Context block found.; GoodCustom: No Metadata.com.aws.cloudformation.Context block found.; GoodCustomResource: No Metadata.com.aws.cloudformation.Context block found.; GoodFunction: No Metadata.com.aws.cloudformation.Context block found.; GoodModule: No Metadata.com.aws.cloudformation.Context block found.; MidStringModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BadCloudFormation", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::NotARealType" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "BadServerless", + "resourceType": "AWS::Serverless::NotARealType" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GoodCustom", + "resourceType": "Custom::MyThing" + }, + "location": { + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GoodCustomResource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GoodFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GoodModule", + "resourceType": "My::Org::Resource::MODULE" + }, + "location": { + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MidStringModule", + "resourceType": "My::Org::MODULE::Thing" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1351,7 +1957,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -1360,6 +1966,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): VpcControl: No Metadata.com.aws.cloudformation.Context block found.; VpcWithConditionalCreateOnly: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "VpcControl", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "VpcWithConditionalCreateOnly", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1437,7 +2097,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -1466,6 +2126,45 @@ "ruleDescription": "Parameter in Fn::Sub variable map is not used in the template string", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1519,7 +2218,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -1528,6 +2227,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 1, + "endLine": 23, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1582,7 +2320,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -1611,6 +2349,45 @@ "ruleDescription": "Dynamic reference resolves secret value but property expects the secret ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyConnection: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyConnection", + "entityType": "Resource", + "resourceType": "AWS::DMS::Endpoint" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -1642,7 +2419,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -1671,6 +2448,45 @@ "ruleDescription": "Dynamic references should not contain spaces", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1724,7 +2540,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -1793,6 +2609,45 @@ "ruleDescription": "String value matches a pseudo parameter; use Ref instead", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -1846,7 +2701,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 12, + "warnings": 14, "informational": 29, "debug": 0 }, @@ -2084,6 +2939,151 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): Asg: No Metadata.com.aws.cloudformation.Context block found.; Elb: No Metadata.com.aws.cloudformation.Context block found.; Host: No Metadata.com.aws.cloudformation.Context block found.; Instance: No Metadata.com.aws.cloudformation.Context block found.; Lt: No Metadata.com.aws.cloudformation.Context block found.; Rds: No Metadata.com.aws.cloudformation.Context block found.; Subnet: No Metadata.com.aws.cloudformation.Context block found.; Tg: No Metadata.com.aws.cloudformation.Context block found.; Volume: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Asg", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "Elb", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Host", + "resourceType": "AWS::EC2::Host" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Lt", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Rds", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Tg", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Volume", + "resourceType": "AWS::EC2::Volume" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -2693,7 +3693,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -2730,6 +3730,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ComputeEnvironment: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ComputeEnvironment", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 21, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -2785,7 +3824,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -2819,6 +3858,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -2873,7 +3951,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -2933,6 +4011,45 @@ "ruleDescription": "Array items must be unique when required", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Task: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -3010,7 +4127,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 1, "debug": 0 }, @@ -3050,6 +4167,194 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W9100_context_malformed.yaml": { + "filePath": "bad/W9100_context_malformed.yaml", + "status": "OK", + "version": "1.8.0", + "metadata": { + "resourcesScanned": 2, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: 'arch' does not match the expected shape. Expected a string. 'ref[0].at' does not match the expected shape. Required field is missing. 'why' belongs at resource level.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 33, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Queue: 'must' does not match the expected shape. Expected an array. 'mutability.QueueName' does not match the expected shape. Value 'never-ish' is not recognized. Allowed values: must-never-change, change-with-constraints, review-required, free-to-tune. 'mutable' does not match the expected shape. Value 'sometimes' is not recognized. Allowed values: must-never-change, change-with-constraints, review-required, free-to-tune. 'ref' belongs at template level. 'trust.conf' does not match the expected shape. Value 'certain' is not recognized. Allowed values: high, medium, low. 'trust.extra' is not recognized by the resource context schema. 'trust.src' does not match the expected shape. Required field is missing. 'unknown' is not recognized by the resource context schema. 'why' does not match the expected shape. Expected a string.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Queue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 13 + }, + "message": "'must' does not match the expected shape. Expected an array. 'mutability.QueueName' does not match the expected shape. Value 'never-ish' is not recognized. Allowed values: must-never-change, change-with-constraints, review-required, free-to-tune. 'mutable' does not match the expected shape. Value 'sometimes' is not recognized. Allowed values: must-never-change, change-with-constraints, review-required, free-to-tune. 'ref' belongs at template level. 'trust.conf' does not match the expected shape. Value 'certain' is not recognized. Allowed values: high, medium, low. 'trust.extra' is not recognized by the resource context schema. 'trust.src' does not match the expected shape. Required field is missing. 'unknown' is not recognized by the resource context schema. 'why' does not match the expected shape. Expected a string." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'MessageRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -3069,6 +4374,195 @@ "endColumn": 9, "ruleDescription": "Resource should have Tags", "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, + "bad/W9100_context_missing.yaml": { + "filePath": "bad/W9100_context_missing.yaml", + "status": "OK", + "version": "1.8.0", + "metadata": { + "resourcesScanned": 3, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 5, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Queue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'MessageRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Bucket' of type 'AWS::S3::Bucket' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 9, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Queue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" } ] }, @@ -3081,7 +4575,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 6, "debug": 0 }, @@ -3110,6 +4604,45 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): AuroraDB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -3232,7 +4765,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -3260,6 +4793,45 @@ "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Dist: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Dist", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -3291,7 +4863,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -3320,6 +4892,45 @@ "ruleDescription": "Validate that CloudFront TargetOriginId is a specified Origin", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Distribution: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -3351,7 +4962,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -3417,6 +5028,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Pipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -3448,7 +5098,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 1, "debug": 0 }, @@ -3532,6 +5182,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Pipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -3563,7 +5252,7 @@ "counts": { "fatal": 5, "errors": 2, - "warnings": 9, + "warnings": 11, "informational": 8, "debug": 0 }, @@ -4000,6 +5689,86 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 52, + "startColumn": 1, + "endLine": 52, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): CloudFrontDistribution: No Metadata.com.aws.cloudformation.Context block found.; EC2Instance: No Metadata.com.aws.cloudformation.Context block found.; MountPoint: No Metadata.com.aws.cloudformation.Context block found.; NewVolume: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "EC2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MountPoint", + "resourceType": "AWS::EC2::VolumeAttachment" + }, + "location": { + "startLine": 69, + "startColumn": 3, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NewVolume", + "resourceType": "AWS::EC2::Volume" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -4181,7 +5950,7 @@ "counts": { "fatal": 1, "errors": 9, - "warnings": 4, + "warnings": 5, "informational": 0, "debug": 0 }, @@ -4431,6 +6200,25 @@ "endColumn": 14, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 1, + "endLine": 23, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -4443,7 +6231,7 @@ "counts": { "fatal": 2, "errors": 15, - "warnings": 14, + "warnings": 16, "informational": 1, "debug": 0 }, @@ -5010,6 +6798,45 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 34, + "startColumn": 5, + "endLine": 34, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): DummyBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DummyBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 35, + "startColumn": 9, + "endLine": 35, + "endColumn": 21, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -5041,7 +6868,7 @@ "counts": { "fatal": 1, "errors": 8, - "warnings": 8, + "warnings": 9, "informational": 0, "debug": 0 }, @@ -5350,6 +7177,25 @@ "endColumn": 13, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 24, + "startColumn": 1, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -5362,7 +7208,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 6, + "warnings": 7, "informational": 0, "debug": 0 }, @@ -5491,6 +7337,25 @@ "endColumn": 19, "ruleDescription": "Fn::Equals will always return true or false", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -5503,7 +7368,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -5592,6 +7457,45 @@ "actualValue": "ami-1234567" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 9, + "endLine": 13, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -5623,7 +7527,7 @@ "counts": { "fatal": 3, "errors": 11, - "warnings": 2, + "warnings": 4, "informational": 17, "debug": 0 }, @@ -6001,6 +7905,138 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 1, + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): AMIIDLookup: No Metadata.com.aws.cloudformation.Context block found.; InstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; myInstance1: No Metadata.com.aws.cloudformation.Context block found.; myInstance2: No Metadata.com.aws.cloudformation.Context block found.; myInstance3: No Metadata.com.aws.cloudformation.Context block found.; myInstance4: No Metadata.com.aws.cloudformation.Context block found.; mySubnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 95, + "startColumn": 3, + "endLine": 95, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "InstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance1", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance4", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -6382,7 +8418,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -6417,6 +8453,25 @@ "endColumn": 11, "ruleDescription": "Conditions section must have valid structure", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -6429,7 +8484,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -6481,6 +8536,25 @@ "endColumn": 25, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -6493,7 +8567,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -6521,6 +8595,45 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -6662,7 +8775,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -6683,6 +8796,25 @@ "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -6695,7 +8827,7 @@ "counts": { "fatal": 4, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -6984,6 +9116,86 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): myBucketFail: No Metadata.com.aws.cloudformation.Context block found.; myBucketFirstAndLastFail: No Metadata.com.aws.cloudformation.Context block found.; myBucketFirstAndLastPass: No Metadata.com.aws.cloudformation.Context block found.; myBucketPass: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myBucketFail", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "myBucketFirstAndLastFail", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myBucketFirstAndLastPass", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myBucketPass", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -7075,7 +9287,7 @@ "counts": { "fatal": 4, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -7364,6 +9576,86 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): myBucketFail: No Metadata.com.aws.cloudformation.Context block found.; myBucketFirstAndLastFail: No Metadata.com.aws.cloudformation.Context block found.; myBucketFirstAndLastPass: No Metadata.com.aws.cloudformation.Context block found.; myBucketPass: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myBucketFail", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "myBucketFirstAndLastFail", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myBucketFirstAndLastPass", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myBucketPass", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -7587,7 +9879,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -7637,6 +9929,45 @@ "endColumn": 9, "ruleDescription": "Mappings are appropriately configured", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -7649,7 +9980,7 @@ "counts": { "fatal": 1, "errors": 6, - "warnings": 3, + "warnings": 5, "informational": 30, "debug": 0 }, @@ -7850,6 +10181,177 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): ALB: No Metadata.com.aws.cloudformation.Context block found.; BadASG: No Metadata.com.aws.cloudformation.Context block found.; BadEnvLambda: No Metadata.com.aws.cloudformation.Context block found.; BadFargateService: No Metadata.com.aws.cloudformation.Context block found.; BadImageLambda: No Metadata.com.aws.cloudformation.Context block found.; BadListener: No Metadata.com.aws.cloudformation.Context block found.; BadRestApi: No Metadata.com.aws.cloudformation.Context block found.; BadValkey: No Metadata.com.aws.cloudformation.Context block found.; LC: No Metadata.com.aws.cloudformation.Context block found.; TG: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ALB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "BadASG", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadEnvLambda", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadFargateService", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 73, + "startColumn": 3, + "endLine": 73, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadImageLambda", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 52, + "startColumn": 3, + "endLine": 52, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadListener", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadRestApi", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadValkey", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LC", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TG", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 85, + "startColumn": 3, + "endLine": 85, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -8497,7 +10999,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -8528,6 +11030,45 @@ "lifecycle": "deprecated" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Domain: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Domain", + "entityType": "Resource", + "resourceType": "AWS::SDB::Domain" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -8575,7 +11116,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -8641,6 +11182,60 @@ "ruleDescription": "Duplicate key in template", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 2, + "endLine": 4, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyEipNat: No Metadata.com.aws.cloudformation.Context block found.; MySNSTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIP" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "MySNSTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -8715,7 +11310,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -8781,6 +11376,60 @@ "ruleDescription": "Duplicate key in template", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -8832,7 +11481,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -8879,6 +11528,60 @@ "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): BucketA: No Metadata.com.aws.cloudformation.Context block found.; BucketB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BucketA", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "BucketB", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -8974,7 +11677,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -8983,6 +11686,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): BucketA: No Metadata.com.aws.cloudformation.Context block found.; BucketB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BucketA", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "BucketB", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -9080,7 +11837,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -9109,6 +11866,45 @@ "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): BadTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BadTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -9220,7 +12016,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -9229,6 +12025,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ProdTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ProdTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -9302,7 +12137,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -9331,6 +12166,45 @@ "ruleDescription": "Required property missing", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): DDBTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -9442,7 +12316,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -9471,6 +12345,45 @@ "ruleDescription": "Validate ECR repository policy", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Repo: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Repo", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -9502,7 +12415,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -9531,6 +12444,45 @@ "ruleDescription": "Validate ECS task definition has correct values for HostPort", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Task: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -9608,7 +12560,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -9673,6 +12625,73 @@ "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -9833,7 +12852,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -9864,6 +12883,60 @@ "actualValue": "subnet-123" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -10052,7 +13125,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -10061,6 +13134,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): ExecRole: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.; TaskRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ExecRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -10203,7 +13343,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -10249,6 +13389,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Listener: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Listener", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -10336,7 +13515,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -10381,6 +13560,45 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -10412,7 +13630,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 7, "debug": 0 }, @@ -10447,6 +13665,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -10616,7 +13873,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 12, "debug": 0 }, @@ -10669,6 +13926,73 @@ "ruleDescription": "Validate ECS service requires NetworkConfiguration", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.; FargateDaemon: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "FargateDaemon", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -10945,7 +14269,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -10972,6 +14296,45 @@ "ruleDescription": "FindInMap map name must exist in Mappings", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -11005,7 +14368,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 5, "debug": 0 }, @@ -11052,6 +14415,45 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -11164,7 +14566,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -11192,6 +14594,45 @@ "ruleDescription": "Invalid YAML/JSON syntax", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -11223,7 +14664,7 @@ "counts": { "fatal": 4, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -11303,6 +14744,45 @@ "endColumn": 34, "ruleDescription": "Fn::ForEach requires the AWS::LanguageExtensions transform", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn::ForEach::Buckets: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn::ForEach::Buckets", + "entityType": "Resource", + "resourceType": "" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 25, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -11315,7 +14795,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -11400,6 +14880,86 @@ "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Topic1: No Metadata.com.aws.cloudformation.Context block found.; Topic2: No Metadata.com.aws.cloudformation.Context block found.; Topic3: No Metadata.com.aws.cloudformation.Context block found.; Topic4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic1", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "Topic2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic3", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 24, + "startColumn": 5, + "endLine": 24, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -11491,7 +15051,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -11576,6 +15136,99 @@ "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Topic1: No Metadata.com.aws.cloudformation.Context block found.; Topic2: No Metadata.com.aws.cloudformation.Context block found.; Topic3: No Metadata.com.aws.cloudformation.Context block found.; Topic4: No Metadata.com.aws.cloudformation.Context block found.; Topic5: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic1", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Topic2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic3", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic5", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -11742,7 +15395,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -11787,6 +15440,45 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): subnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -11864,7 +15556,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -11892,6 +15584,45 @@ "ruleDescription": "Fn::Length requires the AWS::LanguageExtensions transform", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -11978,7 +15709,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 7, + "warnings": 9, "informational": 6, "debug": 0 }, @@ -12145,6 +15876,99 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): AMIIDLookup: No Metadata.com.aws.cloudformation.Context block found.; InstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; SubCondGetAttParam: No Metadata.com.aws.cloudformation.Context block found.; SubCondRefParam: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "InstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubCondGetAttParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubCondRefParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -12281,7 +16105,7 @@ "counts": { "fatal": 0, "errors": 7, - "warnings": 4, + "warnings": 6, "informational": 9, "debug": 0 }, @@ -12504,6 +16328,99 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): TestBadStateMachine1: No Metadata.com.aws.cloudformation.Context block found.; TestBadStateMachine2: No Metadata.com.aws.cloudformation.Context block found.; myInstance: No Metadata.com.aws.cloudformation.Context block found.; myPolicy: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TestBadStateMachine1", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 23, + "relatedResources": [ + { + "resource": { + "id": "TestBadStateMachine2", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3510", "severity": "INFO", @@ -12703,7 +16620,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -12768,6 +16685,45 @@ "ruleDescription": "Fn::ToJsonString requires the AWS::LanguageExtensions transform", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -12799,7 +16755,7 @@ "counts": { "fatal": 2, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -12865,6 +16821,45 @@ "ruleDescription": "Fn::FindInMap operands must be strings or one of Ref/Fn::FindInMap", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -12944,7 +16939,7 @@ "counts": { "fatal": 1, "errors": 4, - "warnings": 3, + "warnings": 5, "informational": 12, "debug": 0 }, @@ -13146,6 +17141,73 @@ "ruleDescription": "Validate the values that come from a Ref function", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): mySubnet1: No Metadata.com.aws.cloudformation.Context block found.; mySubnet2: No Metadata.com.aws.cloudformation.Context block found.; mySubnet3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "mySubnet2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySubnet3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -13418,7 +17480,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -13473,6 +17535,60 @@ "actualValue": "ami-1234" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): myInstance: No Metadata.com.aws.cloudformation.Context block found.; myInstance2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "myInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -13618,7 +17734,7 @@ "counts": { "fatal": 5, "errors": 4, - "warnings": 5, + "warnings": 7, "informational": 23, "debug": 0 }, @@ -13905,6 +18021,86 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): AnotherInstance: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc1: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "MyEC2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc1", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc2", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3100", "severity": "INFO", @@ -14413,7 +18609,7 @@ "counts": { "fatal": 0, "errors": 8, - "warnings": 0, + "warnings": 2, "informational": 12, "debug": 0 }, @@ -14590,6 +18786,86 @@ "actualValue": "String" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): myInstance: No Metadata.com.aws.cloudformation.Context block found.; myInstance1: No Metadata.com.aws.cloudformation.Context block found.; myInstance2: No Metadata.com.aws.cloudformation.Context block found.; myInstance3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "myInstance1", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -14867,7 +19143,7 @@ "counts": { "fatal": 22, "errors": 1, - "warnings": 11, + "warnings": 13, "informational": 38, "debug": 0 }, @@ -15796,6 +20072,281 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 1, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (19 resource(s)): ElasticLoadBalancer: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance1: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance3: No Metadata.com.aws.cloudformation.Context block found.; MyEc2BlockDevice: No Metadata.com.aws.cloudformation.Context block found.; PermitAllInbound: No Metadata.com.aws.cloudformation.Context block found.; RolePolicies: No Metadata.com.aws.cloudformation.Context block found.; RootInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; RootRole: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; conditionLoadBalancer: No Metadata.com.aws.cloudformation.Context block found.; lambdaMap1: No Metadata.com.aws.cloudformation.Context block found.; lambdaMap2: No Metadata.com.aws.cloudformation.Context block found.; myAcl: No Metadata.com.aws.cloudformation.Context block found.; myEc2Instance4: No Metadata.com.aws.cloudformation.Context block found.; myIamProfile: No Metadata.com.aws.cloudformation.Context block found.; myIamProfile2: No Metadata.com.aws.cloudformation.Context block found.; myIamProfile3: No Metadata.com.aws.cloudformation.Context block found.; myLambdaTwo: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ElasticLoadBalancer", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "MyEC2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyEC2Instance1", + "resourceType": "AWS::EC2::Instance1" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyEC2Instance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyEc2BlockDevice", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PermitAllInbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 207, + "startColumn": 3, + "endLine": 207, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RolePolicies", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootInstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 102, + "startColumn": 3, + "endLine": 102, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 69, + "startColumn": 3, + "endLine": 69, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroup", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 136, + "startColumn": 3, + "endLine": 136, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "conditionLoadBalancer", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 148, + "startColumn": 3, + "endLine": 148, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdaMap1", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdaMap2", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 201, + "startColumn": 3, + "endLine": 201, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myAcl", + "resourceType": "AWS::WAFRegional::WebACL" + }, + "location": { + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myEc2Instance4", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myIamProfile", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myIamProfile2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myIamProfile3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myLambdaTwo", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 144, + "startColumn": 3, + "endLine": 144, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -16614,7 +21165,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -16643,6 +21194,60 @@ "ruleDescription": "GetAtt attribute must exist on target resource type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Param: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Param", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -16694,7 +21299,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -16745,6 +21350,112 @@ "actualValue": "Private" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): S3BadBucket: No Metadata.com.aws.cloudformation.Context block found.; SampleBadBucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy1: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy2: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy3: No Metadata.com.aws.cloudformation.Context block found.; SampleRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "S3BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "SampleBadBucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy1", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy2", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 52, + "startColumn": 3, + "endLine": 52, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy3", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3042", "severity": "INFO", @@ -16880,7 +21591,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -16927,6 +21638,60 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Topic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -17023,7 +21788,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -17051,6 +21816,45 @@ "endColumn": 21, "ruleDescription": "IAM Statement must have Effect", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Policy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Policy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -17063,7 +21867,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -17092,6 +21896,60 @@ "ruleDescription": "Check if REFing to a IAM resource with path set", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Project: No Metadata.com.aws.cloudformation.Context block found.; Role: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Project", + "entityType": "Resource", + "resourceType": "AWS::CodeBuild::Project" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Role", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -17166,7 +22024,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -17193,6 +22051,86 @@ "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): NotActionUser: No Metadata.com.aws.cloudformation.Context block found.; WildcardGroup: No Metadata.com.aws.cloudformation.Context block found.; WildcardManagedPolicy: No Metadata.com.aws.cloudformation.Context block found.; WildcardUser: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NotActionUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::User" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "WildcardGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WildcardManagedPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WildcardUser", + "resourceType": "AWS::IAM::User" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -17244,7 +22182,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -17290,6 +22228,45 @@ "ruleDescription": "Fn::Equals will always return true or false", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -17343,7 +22320,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -17388,6 +22365,45 @@ "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -17419,7 +22435,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -17464,6 +22480,45 @@ "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -17495,7 +22550,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -17540,6 +22595,45 @@ "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -17571,7 +22665,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -17601,6 +22695,45 @@ "ruleDescription": "Ref/GetAtt target must exist", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): RDSOptionGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "RDSOptionGroup", + "entityType": "Resource", + "resourceType": "AWS::RDS::OptionGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 17, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -17734,7 +22867,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -17782,6 +22915,45 @@ "ruleDescription": "Container image functions cannot use Handler, Runtime, or Layers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -17835,7 +23007,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -17844,6 +23016,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Func: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I2530", "severity": "INFO", @@ -17918,7 +23129,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -17966,6 +23177,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Perm: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -18065,7 +23315,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -18112,6 +23362,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SnapStartFunc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -18165,7 +23454,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -18194,6 +23483,45 @@ "ruleDescription": "Validate that SnapStart is properly configured", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Func: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -18225,7 +23553,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 7, "debug": 0 }, @@ -18259,6 +23587,73 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): ESM: No Metadata.com.aws.cloudformation.Context block found.; Func: No Metadata.com.aws.cloudformation.Context block found.; Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ESM", + "entityType": "Resource", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "Func", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Queue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -18408,7 +23803,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -18437,6 +23832,45 @@ "ruleDescription": "Check required properties for Lambda if the deployment package is a .zip file", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Func: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Func", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -18490,7 +23924,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -18535,6 +23969,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): LambdaFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I2530", "severity": "INFO", @@ -18609,7 +24082,7 @@ "counts": { "fatal": 5, "errors": 0, - "warnings": 401, + "warnings": 403, "informational": 501, "debug": 0 }, @@ -25907,903 +31380,7444 @@ "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource1' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource1", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 405, - "startColumn": 3, - "endLine": 405, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource2", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 407, - "startColumn": 3, - "endLine": 407, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource3", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 409, - "startColumn": 3, - "endLine": 409, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource4", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 411, - "startColumn": 3, - "endLine": 411, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource5", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 413, - "startColumn": 3, - "endLine": 413, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource6", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 415, - "startColumn": 3, - "endLine": 415, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource7", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 417, - "startColumn": 3, - "endLine": 417, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", "source": "ENGINE", "entity": { - "logicalId": "Resource8", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", "category": "Best Practice", - "startLine": 419, - "startColumn": 3, - "endLine": 419, - "endColumn": 12, - "ruleDescription": "Resource should have Tags", + "startLine": 404, + "startColumn": 1, + "endLine": 404, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", "phase": "LINT" }, { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (501 resource(s)): Resource1: No Metadata.com.aws.cloudformation.Context block found.; Resource10: No Metadata.com.aws.cloudformation.Context block found.; Resource100: No Metadata.com.aws.cloudformation.Context block found.; Resource101: No Metadata.com.aws.cloudformation.Context block found.; Resource102: No Metadata.com.aws.cloudformation.Context block found.; Resource103: No Metadata.com.aws.cloudformation.Context block found.; Resource104: No Metadata.com.aws.cloudformation.Context block found.; Resource105: No Metadata.com.aws.cloudformation.Context block found.; Resource106: No Metadata.com.aws.cloudformation.Context block found.; Resource107: No Metadata.com.aws.cloudformation.Context block found.; Resource108: No Metadata.com.aws.cloudformation.Context block found.; Resource109: No Metadata.com.aws.cloudformation.Context block found.; Resource11: No Metadata.com.aws.cloudformation.Context block found.; Resource110: No Metadata.com.aws.cloudformation.Context block found.; Resource111: No Metadata.com.aws.cloudformation.Context block found.; Resource112: No Metadata.com.aws.cloudformation.Context block found.; Resource113: No Metadata.com.aws.cloudformation.Context block found.; Resource114: No Metadata.com.aws.cloudformation.Context block found.; Resource115: No Metadata.com.aws.cloudformation.Context block found.; Resource116: No Metadata.com.aws.cloudformation.Context block found.; Resource117: No Metadata.com.aws.cloudformation.Context block found.; Resource118: No Metadata.com.aws.cloudformation.Context block found.; Resource119: No Metadata.com.aws.cloudformation.Context block found.; Resource12: No Metadata.com.aws.cloudformation.Context block found.; Resource120: No Metadata.com.aws.cloudformation.Context block found.; Resource121: No Metadata.com.aws.cloudformation.Context block found.; Resource122: No Metadata.com.aws.cloudformation.Context block found.; Resource123: No Metadata.com.aws.cloudformation.Context block found.; Resource124: No Metadata.com.aws.cloudformation.Context block found.; Resource125: No Metadata.com.aws.cloudformation.Context block found.; Resource126: No Metadata.com.aws.cloudformation.Context block found.; Resource127: No Metadata.com.aws.cloudformation.Context block found.; Resource128: No Metadata.com.aws.cloudformation.Context block found.; Resource129: No Metadata.com.aws.cloudformation.Context block found.; Resource13: No Metadata.com.aws.cloudformation.Context block found.; Resource130: No Metadata.com.aws.cloudformation.Context block found.; Resource131: No Metadata.com.aws.cloudformation.Context block found.; Resource132: No Metadata.com.aws.cloudformation.Context block found.; Resource133: No Metadata.com.aws.cloudformation.Context block found.; Resource134: No Metadata.com.aws.cloudformation.Context block found.; Resource135: No Metadata.com.aws.cloudformation.Context block found.; Resource136: No Metadata.com.aws.cloudformation.Context block found.; Resource137: No Metadata.com.aws.cloudformation.Context block found.; Resource138: No Metadata.com.aws.cloudformation.Context block found.; Resource139: No Metadata.com.aws.cloudformation.Context block found.; Resource14: No Metadata.com.aws.cloudformation.Context block found.; Resource140: No Metadata.com.aws.cloudformation.Context block found.; Resource141: No Metadata.com.aws.cloudformation.Context block found.; Resource142: No Metadata.com.aws.cloudformation.Context block found.; Resource143: No Metadata.com.aws.cloudformation.Context block found.; Resource144: No Metadata.com.aws.cloudformation.Context block found.; Resource145: No Metadata.com.aws.cloudformation.Context block found.; Resource146: No Metadata.com.aws.cloudformation.Context block found.; Resource147: No Metadata.com.aws.cloudformation.Context block found.; Resource148: No Metadata.com.aws.cloudformation.Context block found.; Resource149: No Metadata.com.aws.cloudformation.Context block found.; Resource15: No Metadata.com.aws.cloudformation.Context block found.; Resource150: No Metadata.com.aws.cloudformation.Context block found.; Resource151: No Metadata.com.aws.cloudformation.Context block found.; Resource152: No Metadata.com.aws.cloudformation.Context block found.; Resource153: No Metadata.com.aws.cloudformation.Context block found.; Resource154: No Metadata.com.aws.cloudformation.Context block found.; Resource155: No Metadata.com.aws.cloudformation.Context block found.; Resource156: No Metadata.com.aws.cloudformation.Context block found.; Resource157: No Metadata.com.aws.cloudformation.Context block found.; Resource158: No Metadata.com.aws.cloudformation.Context block found.; Resource159: No Metadata.com.aws.cloudformation.Context block found.; Resource16: No Metadata.com.aws.cloudformation.Context block found.; Resource160: No Metadata.com.aws.cloudformation.Context block found.; Resource161: No Metadata.com.aws.cloudformation.Context block found.; Resource162: No Metadata.com.aws.cloudformation.Context block found.; Resource163: No Metadata.com.aws.cloudformation.Context block found.; Resource164: No Metadata.com.aws.cloudformation.Context block found.; Resource165: No Metadata.com.aws.cloudformation.Context block found.; Resource166: No Metadata.com.aws.cloudformation.Context block found.; Resource167: No Metadata.com.aws.cloudformation.Context block found.; Resource168: No Metadata.com.aws.cloudformation.Context block found.; Resource169: No Metadata.com.aws.cloudformation.Context block found.; Resource17: No Metadata.com.aws.cloudformation.Context block found.; Resource170: No Metadata.com.aws.cloudformation.Context block found.; Resource171: No Metadata.com.aws.cloudformation.Context block found.; Resource172: No Metadata.com.aws.cloudformation.Context block found.; Resource173: No Metadata.com.aws.cloudformation.Context block found.; Resource174: No Metadata.com.aws.cloudformation.Context block found.; Resource175: No Metadata.com.aws.cloudformation.Context block found.; Resource176: No Metadata.com.aws.cloudformation.Context block found.; Resource177: No Metadata.com.aws.cloudformation.Context block found.; Resource178: No Metadata.com.aws.cloudformation.Context block found.; Resource179: No Metadata.com.aws.cloudformation.Context block found.; Resource18: No Metadata.com.aws.cloudformation.Context block found.; Resource180: No Metadata.com.aws.cloudformation.Context block found.; Resource181: No Metadata.com.aws.cloudformation.Context block found.; Resource182: No Metadata.com.aws.cloudformation.Context block found.; Resource183: No Metadata.com.aws.cloudformation.Context block found.; Resource184: No Metadata.com.aws.cloudformation.Context block found.; Resource185: No Metadata.com.aws.cloudformation.Context block found.; Resource186: No Metadata.com.aws.cloudformation.Context block found.; Resource187: No Metadata.com.aws.cloudformation.Context block found.; Resource188: No Metadata.com.aws.cloudformation.Context block found.; Resource189: No Metadata.com.aws.cloudformation.Context block found.; Resource19: No Metadata.com.aws.cloudformation.Context block found.; Resource190: No Metadata.com.aws.cloudformation.Context block found.; Resource191: No Metadata.com.aws.cloudformation.Context block found.; Resource192: No Metadata.com.aws.cloudformation.Context block found.; Resource193: No Metadata.com.aws.cloudformation.Context block found.; Resource194: No Metadata.com.aws.cloudformation.Context block found.; Resource195: No Metadata.com.aws.cloudformation.Context block found.; Resource196: No Metadata.com.aws.cloudformation.Context block found.; Resource197: No Metadata.com.aws.cloudformation.Context block found.; Resource198: No Metadata.com.aws.cloudformation.Context block found.; Resource199: No Metadata.com.aws.cloudformation.Context block found.; Resource2: No Metadata.com.aws.cloudformation.Context block found.; Resource20: No Metadata.com.aws.cloudformation.Context block found.; Resource200: No Metadata.com.aws.cloudformation.Context block found.; Resource201: No Metadata.com.aws.cloudformation.Context block found.; Resource202: No Metadata.com.aws.cloudformation.Context block found.; Resource203: No Metadata.com.aws.cloudformation.Context block found.; Resource204: No Metadata.com.aws.cloudformation.Context block found.; Resource205: No Metadata.com.aws.cloudformation.Context block found.; Resource206: No Metadata.com.aws.cloudformation.Context block found.; Resource207: No Metadata.com.aws.cloudformation.Context block found.; Resource208: No Metadata.com.aws.cloudformation.Context block found.; Resource209: No Metadata.com.aws.cloudformation.Context block found.; Resource21: No Metadata.com.aws.cloudformation.Context block found.; Resource210: No Metadata.com.aws.cloudformation.Context block found.; Resource211: No Metadata.com.aws.cloudformation.Context block found.; Resource212: No Metadata.com.aws.cloudformation.Context block found.; Resource213: No Metadata.com.aws.cloudformation.Context block found.; Resource214: No Metadata.com.aws.cloudformation.Context block found.; Resource215: No Metadata.com.aws.cloudformation.Context block found.; Resource216: No Metadata.com.aws.cloudformation.Context block found.; Resource217: No Metadata.com.aws.cloudformation.Context block found.; Resource218: No Metadata.com.aws.cloudformation.Context block found.; Resource219: No Metadata.com.aws.cloudformation.Context block found.; Resource22: No Metadata.com.aws.cloudformation.Context block found.; Resource220: No Metadata.com.aws.cloudformation.Context block found.; Resource221: No Metadata.com.aws.cloudformation.Context block found.; Resource222: No Metadata.com.aws.cloudformation.Context block found.; Resource223: No Metadata.com.aws.cloudformation.Context block found.; Resource224: No Metadata.com.aws.cloudformation.Context block found.; Resource225: No Metadata.com.aws.cloudformation.Context block found.; Resource226: No Metadata.com.aws.cloudformation.Context block found.; Resource227: No Metadata.com.aws.cloudformation.Context block found.; Resource228: No Metadata.com.aws.cloudformation.Context block found.; Resource229: No Metadata.com.aws.cloudformation.Context block found.; Resource23: No Metadata.com.aws.cloudformation.Context block found.; Resource230: No Metadata.com.aws.cloudformation.Context block found.; Resource231: No Metadata.com.aws.cloudformation.Context block found.; Resource232: No Metadata.com.aws.cloudformation.Context block found.; Resource233: No Metadata.com.aws.cloudformation.Context block found.; Resource234: No Metadata.com.aws.cloudformation.Context block found.; Resource235: No Metadata.com.aws.cloudformation.Context block found.; Resource236: No Metadata.com.aws.cloudformation.Context block found.; Resource237: No Metadata.com.aws.cloudformation.Context block found.; Resource238: No Metadata.com.aws.cloudformation.Context block found.; Resource239: No Metadata.com.aws.cloudformation.Context block found.; Resource24: No Metadata.com.aws.cloudformation.Context block found.; Resource240: No Metadata.com.aws.cloudformation.Context block found.; Resource241: No Metadata.com.aws.cloudformation.Context block found.; Resource242: No Metadata.com.aws.cloudformation.Context block found.; Resource243: No Metadata.com.aws.cloudformation.Context block found.; Resource244: No Metadata.com.aws.cloudformation.Context block found.; Resource245: No Metadata.com.aws.cloudformation.Context block found.; Resource246: No Metadata.com.aws.cloudformation.Context block found.; Resource247: No Metadata.com.aws.cloudformation.Context block found.; Resource248: No Metadata.com.aws.cloudformation.Context block found.; Resource249: No Metadata.com.aws.cloudformation.Context block found.; Resource25: No Metadata.com.aws.cloudformation.Context block found.; Resource250: No Metadata.com.aws.cloudformation.Context block found.; Resource251: No Metadata.com.aws.cloudformation.Context block found.; Resource252: No Metadata.com.aws.cloudformation.Context block found.; Resource253: No Metadata.com.aws.cloudformation.Context block found.; Resource254: No Metadata.com.aws.cloudformation.Context block found.; Resource255: No Metadata.com.aws.cloudformation.Context block found.; Resource256: No Metadata.com.aws.cloudformation.Context block found.; Resource257: No Metadata.com.aws.cloudformation.Context block found.; Resource258: No Metadata.com.aws.cloudformation.Context block found.; Resource259: No Metadata.com.aws.cloudformation.Context block found.; Resource26: No Metadata.com.aws.cloudformation.Context block found.; Resource260: No Metadata.com.aws.cloudformation.Context block found.; Resource261: No Metadata.com.aws.cloudformation.Context block found.; Resource262: No Metadata.com.aws.cloudformation.Context block found.; Resource263: No Metadata.com.aws.cloudformation.Context block found.; Resource264: No Metadata.com.aws.cloudformation.Context block found.; Resource265: No Metadata.com.aws.cloudformation.Context block found.; Resource266: No Metadata.com.aws.cloudformation.Context block found.; Resource267: No Metadata.com.aws.cloudformation.Context block found.; Resource268: No Metadata.com.aws.cloudformation.Context block found.; Resource269: No Metadata.com.aws.cloudformation.Context block found.; Resource27: No Metadata.com.aws.cloudformation.Context block found.; Resource270: No Metadata.com.aws.cloudformation.Context block found.; Resource271: No Metadata.com.aws.cloudformation.Context block found.; Resource272: No Metadata.com.aws.cloudformation.Context block found.; Resource273: No Metadata.com.aws.cloudformation.Context block found.; Resource274: No Metadata.com.aws.cloudformation.Context block found.; Resource275: No Metadata.com.aws.cloudformation.Context block found.; Resource276: No Metadata.com.aws.cloudformation.Context block found.; Resource277: No Metadata.com.aws.cloudformation.Context block found.; Resource278: No Metadata.com.aws.cloudformation.Context block found.; Resource279: No Metadata.com.aws.cloudformation.Context block found.; Resource28: No Metadata.com.aws.cloudformation.Context block found.; Resource280: No Metadata.com.aws.cloudformation.Context block found.; Resource281: No Metadata.com.aws.cloudformation.Context block found.; Resource282: No Metadata.com.aws.cloudformation.Context block found.; Resource283: No Metadata.com.aws.cloudformation.Context block found.; Resource284: No Metadata.com.aws.cloudformation.Context block found.; Resource285: No Metadata.com.aws.cloudformation.Context block found.; Resource286: No Metadata.com.aws.cloudformation.Context block found.; Resource287: No Metadata.com.aws.cloudformation.Context block found.; Resource288: No Metadata.com.aws.cloudformation.Context block found.; Resource289: No Metadata.com.aws.cloudformation.Context block found.; Resource29: No Metadata.com.aws.cloudformation.Context block found.; Resource290: No Metadata.com.aws.cloudformation.Context block found.; Resource291: No Metadata.com.aws.cloudformation.Context block found.; Resource292: No Metadata.com.aws.cloudformation.Context block found.; Resource293: No Metadata.com.aws.cloudformation.Context block found.; Resource294: No Metadata.com.aws.cloudformation.Context block found.; Resource295: No Metadata.com.aws.cloudformation.Context block found.; Resource296: No Metadata.com.aws.cloudformation.Context block found.; Resource297: No Metadata.com.aws.cloudformation.Context block found.; Resource298: No Metadata.com.aws.cloudformation.Context block found.; Resource299: No Metadata.com.aws.cloudformation.Context block found.; Resource3: No Metadata.com.aws.cloudformation.Context block found.; Resource30: No Metadata.com.aws.cloudformation.Context block found.; Resource300: No Metadata.com.aws.cloudformation.Context block found.; Resource301: No Metadata.com.aws.cloudformation.Context block found.; Resource302: No Metadata.com.aws.cloudformation.Context block found.; Resource303: No Metadata.com.aws.cloudformation.Context block found.; Resource304: No Metadata.com.aws.cloudformation.Context block found.; Resource305: No Metadata.com.aws.cloudformation.Context block found.; Resource306: No Metadata.com.aws.cloudformation.Context block found.; Resource307: No Metadata.com.aws.cloudformation.Context block found.; Resource308: No Metadata.com.aws.cloudformation.Context block found.; Resource309: No Metadata.com.aws.cloudformation.Context block found.; Resource31: No Metadata.com.aws.cloudformation.Context block found.; Resource310: No Metadata.com.aws.cloudformation.Context block found.; Resource311: No Metadata.com.aws.cloudformation.Context block found.; Resource312: No Metadata.com.aws.cloudformation.Context block found.; Resource313: No Metadata.com.aws.cloudformation.Context block found.; Resource314: No Metadata.com.aws.cloudformation.Context block found.; Resource315: No Metadata.com.aws.cloudformation.Context block found.; Resource316: No Metadata.com.aws.cloudformation.Context block found.; Resource317: No Metadata.com.aws.cloudformation.Context block found.; Resource318: No Metadata.com.aws.cloudformation.Context block found.; Resource319: No Metadata.com.aws.cloudformation.Context block found.; Resource32: No Metadata.com.aws.cloudformation.Context block found.; Resource320: No Metadata.com.aws.cloudformation.Context block found.; Resource321: No Metadata.com.aws.cloudformation.Context block found.; Resource322: No Metadata.com.aws.cloudformation.Context block found.; Resource323: No Metadata.com.aws.cloudformation.Context block found.; Resource324: No Metadata.com.aws.cloudformation.Context block found.; Resource325: No Metadata.com.aws.cloudformation.Context block found.; Resource326: No Metadata.com.aws.cloudformation.Context block found.; Resource327: No Metadata.com.aws.cloudformation.Context block found.; Resource328: No Metadata.com.aws.cloudformation.Context block found.; Resource329: No Metadata.com.aws.cloudformation.Context block found.; Resource33: No Metadata.com.aws.cloudformation.Context block found.; Resource330: No Metadata.com.aws.cloudformation.Context block found.; Resource331: No Metadata.com.aws.cloudformation.Context block found.; Resource332: No Metadata.com.aws.cloudformation.Context block found.; Resource333: No Metadata.com.aws.cloudformation.Context block found.; Resource334: No Metadata.com.aws.cloudformation.Context block found.; Resource335: No Metadata.com.aws.cloudformation.Context block found.; Resource336: No Metadata.com.aws.cloudformation.Context block found.; Resource337: No Metadata.com.aws.cloudformation.Context block found.; Resource338: No Metadata.com.aws.cloudformation.Context block found.; Resource339: No Metadata.com.aws.cloudformation.Context block found.; Resource34: No Metadata.com.aws.cloudformation.Context block found.; Resource340: No Metadata.com.aws.cloudformation.Context block found.; Resource341: No Metadata.com.aws.cloudformation.Context block found.; Resource342: No Metadata.com.aws.cloudformation.Context block found.; Resource343: No Metadata.com.aws.cloudformation.Context block found.; Resource344: No Metadata.com.aws.cloudformation.Context block found.; Resource345: No Metadata.com.aws.cloudformation.Context block found.; Resource346: No Metadata.com.aws.cloudformation.Context block found.; Resource347: No Metadata.com.aws.cloudformation.Context block found.; Resource348: No Metadata.com.aws.cloudformation.Context block found.; Resource349: No Metadata.com.aws.cloudformation.Context block found.; Resource35: No Metadata.com.aws.cloudformation.Context block found.; Resource350: No Metadata.com.aws.cloudformation.Context block found.; Resource351: No Metadata.com.aws.cloudformation.Context block found.; Resource352: No Metadata.com.aws.cloudformation.Context block found.; Resource353: No Metadata.com.aws.cloudformation.Context block found.; Resource354: No Metadata.com.aws.cloudformation.Context block found.; Resource355: No Metadata.com.aws.cloudformation.Context block found.; Resource356: No Metadata.com.aws.cloudformation.Context block found.; Resource357: No Metadata.com.aws.cloudformation.Context block found.; Resource358: No Metadata.com.aws.cloudformation.Context block found.; Resource359: No Metadata.com.aws.cloudformation.Context block found.; Resource36: No Metadata.com.aws.cloudformation.Context block found.; Resource360: No Metadata.com.aws.cloudformation.Context block found.; Resource361: No Metadata.com.aws.cloudformation.Context block found.; Resource362: No Metadata.com.aws.cloudformation.Context block found.; Resource363: No Metadata.com.aws.cloudformation.Context block found.; Resource364: No Metadata.com.aws.cloudformation.Context block found.; Resource365: No Metadata.com.aws.cloudformation.Context block found.; Resource366: No Metadata.com.aws.cloudformation.Context block found.; Resource367: No Metadata.com.aws.cloudformation.Context block found.; Resource368: No Metadata.com.aws.cloudformation.Context block found.; Resource369: No Metadata.com.aws.cloudformation.Context block found.; Resource37: No Metadata.com.aws.cloudformation.Context block found.; Resource370: No Metadata.com.aws.cloudformation.Context block found.; Resource371: No Metadata.com.aws.cloudformation.Context block found.; Resource372: No Metadata.com.aws.cloudformation.Context block found.; Resource373: No Metadata.com.aws.cloudformation.Context block found.; Resource374: No Metadata.com.aws.cloudformation.Context block found.; Resource375: No Metadata.com.aws.cloudformation.Context block found.; Resource376: No Metadata.com.aws.cloudformation.Context block found.; Resource377: No Metadata.com.aws.cloudformation.Context block found.; Resource378: No Metadata.com.aws.cloudformation.Context block found.; Resource379: No Metadata.com.aws.cloudformation.Context block found.; Resource38: No Metadata.com.aws.cloudformation.Context block found.; Resource380: No Metadata.com.aws.cloudformation.Context block found.; Resource381: No Metadata.com.aws.cloudformation.Context block found.; Resource382: No Metadata.com.aws.cloudformation.Context block found.; Resource383: No Metadata.com.aws.cloudformation.Context block found.; Resource384: No Metadata.com.aws.cloudformation.Context block found.; Resource385: No Metadata.com.aws.cloudformation.Context block found.; Resource386: No Metadata.com.aws.cloudformation.Context block found.; Resource387: No Metadata.com.aws.cloudformation.Context block found.; Resource388: No Metadata.com.aws.cloudformation.Context block found.; Resource389: No Metadata.com.aws.cloudformation.Context block found.; Resource39: No Metadata.com.aws.cloudformation.Context block found.; Resource390: No Metadata.com.aws.cloudformation.Context block found.; Resource391: No Metadata.com.aws.cloudformation.Context block found.; Resource392: No Metadata.com.aws.cloudformation.Context block found.; Resource393: No Metadata.com.aws.cloudformation.Context block found.; Resource394: No Metadata.com.aws.cloudformation.Context block found.; Resource395: No Metadata.com.aws.cloudformation.Context block found.; Resource396: No Metadata.com.aws.cloudformation.Context block found.; Resource397: No Metadata.com.aws.cloudformation.Context block found.; Resource398: No Metadata.com.aws.cloudformation.Context block found.; Resource399: No Metadata.com.aws.cloudformation.Context block found.; Resource4: No Metadata.com.aws.cloudformation.Context block found.; Resource40: No Metadata.com.aws.cloudformation.Context block found.; Resource400: No Metadata.com.aws.cloudformation.Context block found.; Resource401: No Metadata.com.aws.cloudformation.Context block found.; Resource402: No Metadata.com.aws.cloudformation.Context block found.; Resource403: No Metadata.com.aws.cloudformation.Context block found.; Resource404: No Metadata.com.aws.cloudformation.Context block found.; Resource405: No Metadata.com.aws.cloudformation.Context block found.; Resource406: No Metadata.com.aws.cloudformation.Context block found.; Resource407: No Metadata.com.aws.cloudformation.Context block found.; Resource408: No Metadata.com.aws.cloudformation.Context block found.; Resource409: No Metadata.com.aws.cloudformation.Context block found.; Resource41: No Metadata.com.aws.cloudformation.Context block found.; Resource410: No Metadata.com.aws.cloudformation.Context block found.; Resource411: No Metadata.com.aws.cloudformation.Context block found.; Resource412: No Metadata.com.aws.cloudformation.Context block found.; Resource413: No Metadata.com.aws.cloudformation.Context block found.; Resource414: No Metadata.com.aws.cloudformation.Context block found.; Resource415: No Metadata.com.aws.cloudformation.Context block found.; Resource416: No Metadata.com.aws.cloudformation.Context block found.; Resource417: No Metadata.com.aws.cloudformation.Context block found.; Resource418: No Metadata.com.aws.cloudformation.Context block found.; Resource419: No Metadata.com.aws.cloudformation.Context block found.; Resource42: No Metadata.com.aws.cloudformation.Context block found.; Resource420: No Metadata.com.aws.cloudformation.Context block found.; Resource421: No Metadata.com.aws.cloudformation.Context block found.; Resource422: No Metadata.com.aws.cloudformation.Context block found.; Resource423: No Metadata.com.aws.cloudformation.Context block found.; Resource424: No Metadata.com.aws.cloudformation.Context block found.; Resource425: No Metadata.com.aws.cloudformation.Context block found.; Resource426: No Metadata.com.aws.cloudformation.Context block found.; Resource427: No Metadata.com.aws.cloudformation.Context block found.; Resource428: No Metadata.com.aws.cloudformation.Context block found.; Resource429: No Metadata.com.aws.cloudformation.Context block found.; Resource43: No Metadata.com.aws.cloudformation.Context block found.; Resource430: No Metadata.com.aws.cloudformation.Context block found.; Resource431: No Metadata.com.aws.cloudformation.Context block found.; Resource432: No Metadata.com.aws.cloudformation.Context block found.; Resource433: No Metadata.com.aws.cloudformation.Context block found.; Resource434: No Metadata.com.aws.cloudformation.Context block found.; Resource435: No Metadata.com.aws.cloudformation.Context block found.; Resource436: No Metadata.com.aws.cloudformation.Context block found.; Resource437: No Metadata.com.aws.cloudformation.Context block found.; Resource438: No Metadata.com.aws.cloudformation.Context block found.; Resource439: No Metadata.com.aws.cloudformation.Context block found.; Resource44: No Metadata.com.aws.cloudformation.Context block found.; Resource440: No Metadata.com.aws.cloudformation.Context block found.; Resource441: No Metadata.com.aws.cloudformation.Context block found.; Resource442: No Metadata.com.aws.cloudformation.Context block found.; Resource443: No Metadata.com.aws.cloudformation.Context block found.; Resource444: No Metadata.com.aws.cloudformation.Context block found.; Resource445: No Metadata.com.aws.cloudformation.Context block found.; Resource446: No Metadata.com.aws.cloudformation.Context block found.; Resource447: No Metadata.com.aws.cloudformation.Context block found.; Resource448: No Metadata.com.aws.cloudformation.Context block found.; Resource449: No Metadata.com.aws.cloudformation.Context block found.; Resource45: No Metadata.com.aws.cloudformation.Context block found.; Resource450: No Metadata.com.aws.cloudformation.Context block found.; Resource451: No Metadata.com.aws.cloudformation.Context block found.; Resource452: No Metadata.com.aws.cloudformation.Context block found.; Resource453: No Metadata.com.aws.cloudformation.Context block found.; Resource454: No Metadata.com.aws.cloudformation.Context block found.; Resource455: No Metadata.com.aws.cloudformation.Context block found.; Resource456: No Metadata.com.aws.cloudformation.Context block found.; Resource457: No Metadata.com.aws.cloudformation.Context block found.; Resource458: No Metadata.com.aws.cloudformation.Context block found.; Resource459: No Metadata.com.aws.cloudformation.Context block found.; Resource46: No Metadata.com.aws.cloudformation.Context block found.; Resource460: No Metadata.com.aws.cloudformation.Context block found.; Resource461: No Metadata.com.aws.cloudformation.Context block found.; Resource462: No Metadata.com.aws.cloudformation.Context block found.; Resource463: No Metadata.com.aws.cloudformation.Context block found.; Resource464: No Metadata.com.aws.cloudformation.Context block found.; Resource465: No Metadata.com.aws.cloudformation.Context block found.; Resource466: No Metadata.com.aws.cloudformation.Context block found.; Resource467: No Metadata.com.aws.cloudformation.Context block found.; Resource468: No Metadata.com.aws.cloudformation.Context block found.; Resource469: No Metadata.com.aws.cloudformation.Context block found.; Resource47: No Metadata.com.aws.cloudformation.Context block found.; Resource470: No Metadata.com.aws.cloudformation.Context block found.; Resource471: No Metadata.com.aws.cloudformation.Context block found.; Resource472: No Metadata.com.aws.cloudformation.Context block found.; Resource473: No Metadata.com.aws.cloudformation.Context block found.; Resource474: No Metadata.com.aws.cloudformation.Context block found.; Resource475: No Metadata.com.aws.cloudformation.Context block found.; Resource476: No Metadata.com.aws.cloudformation.Context block found.; Resource477: No Metadata.com.aws.cloudformation.Context block found.; Resource478: No Metadata.com.aws.cloudformation.Context block found.; Resource479: No Metadata.com.aws.cloudformation.Context block found.; Resource48: No Metadata.com.aws.cloudformation.Context block found.; Resource480: No Metadata.com.aws.cloudformation.Context block found.; Resource481: No Metadata.com.aws.cloudformation.Context block found.; Resource482: No Metadata.com.aws.cloudformation.Context block found.; Resource483: No Metadata.com.aws.cloudformation.Context block found.; Resource484: No Metadata.com.aws.cloudformation.Context block found.; Resource485: No Metadata.com.aws.cloudformation.Context block found.; Resource486: No Metadata.com.aws.cloudformation.Context block found.; Resource487: No Metadata.com.aws.cloudformation.Context block found.; Resource488: No Metadata.com.aws.cloudformation.Context block found.; Resource489: No Metadata.com.aws.cloudformation.Context block found.; Resource49: No Metadata.com.aws.cloudformation.Context block found.; Resource490: No Metadata.com.aws.cloudformation.Context block found.; Resource491: No Metadata.com.aws.cloudformation.Context block found.; Resource492: No Metadata.com.aws.cloudformation.Context block found.; Resource493: No Metadata.com.aws.cloudformation.Context block found.; Resource494: No Metadata.com.aws.cloudformation.Context block found.; Resource495: No Metadata.com.aws.cloudformation.Context block found.; Resource496: No Metadata.com.aws.cloudformation.Context block found.; Resource497: No Metadata.com.aws.cloudformation.Context block found.; Resource498: No Metadata.com.aws.cloudformation.Context block found.; Resource499: No Metadata.com.aws.cloudformation.Context block found.; Resource5: No Metadata.com.aws.cloudformation.Context block found.; Resource50: No Metadata.com.aws.cloudformation.Context block found.; Resource500: No Metadata.com.aws.cloudformation.Context block found.; Resource501: No Metadata.com.aws.cloudformation.Context block found.; Resource51: No Metadata.com.aws.cloudformation.Context block found.; Resource52: No Metadata.com.aws.cloudformation.Context block found.; Resource53: No Metadata.com.aws.cloudformation.Context block found.; Resource54: No Metadata.com.aws.cloudformation.Context block found.; Resource55: No Metadata.com.aws.cloudformation.Context block found.; Resource56: No Metadata.com.aws.cloudformation.Context block found.; Resource57: No Metadata.com.aws.cloudformation.Context block found.; Resource58: No Metadata.com.aws.cloudformation.Context block found.; Resource59: No Metadata.com.aws.cloudformation.Context block found.; Resource6: No Metadata.com.aws.cloudformation.Context block found.; Resource60: No Metadata.com.aws.cloudformation.Context block found.; Resource61: No Metadata.com.aws.cloudformation.Context block found.; Resource62: No Metadata.com.aws.cloudformation.Context block found.; Resource63: No Metadata.com.aws.cloudformation.Context block found.; Resource64: No Metadata.com.aws.cloudformation.Context block found.; Resource65: No Metadata.com.aws.cloudformation.Context block found.; Resource66: No Metadata.com.aws.cloudformation.Context block found.; Resource67: No Metadata.com.aws.cloudformation.Context block found.; Resource68: No Metadata.com.aws.cloudformation.Context block found.; Resource69: No Metadata.com.aws.cloudformation.Context block found.; Resource7: No Metadata.com.aws.cloudformation.Context block found.; Resource70: No Metadata.com.aws.cloudformation.Context block found.; Resource71: No Metadata.com.aws.cloudformation.Context block found.; Resource72: No Metadata.com.aws.cloudformation.Context block found.; Resource73: No Metadata.com.aws.cloudformation.Context block found.; Resource74: No Metadata.com.aws.cloudformation.Context block found.; Resource75: No Metadata.com.aws.cloudformation.Context block found.; Resource76: No Metadata.com.aws.cloudformation.Context block found.; Resource77: No Metadata.com.aws.cloudformation.Context block found.; Resource78: No Metadata.com.aws.cloudformation.Context block found.; Resource79: No Metadata.com.aws.cloudformation.Context block found.; Resource8: No Metadata.com.aws.cloudformation.Context block found.; Resource80: No Metadata.com.aws.cloudformation.Context block found.; Resource81: No Metadata.com.aws.cloudformation.Context block found.; Resource82: No Metadata.com.aws.cloudformation.Context block found.; Resource83: No Metadata.com.aws.cloudformation.Context block found.; Resource84: No Metadata.com.aws.cloudformation.Context block found.; Resource85: No Metadata.com.aws.cloudformation.Context block found.; Resource86: No Metadata.com.aws.cloudformation.Context block found.; Resource87: No Metadata.com.aws.cloudformation.Context block found.; Resource88: No Metadata.com.aws.cloudformation.Context block found.; Resource89: No Metadata.com.aws.cloudformation.Context block found.; Resource9: No Metadata.com.aws.cloudformation.Context block found.; Resource90: No Metadata.com.aws.cloudformation.Context block found.; Resource91: No Metadata.com.aws.cloudformation.Context block found.; Resource92: No Metadata.com.aws.cloudformation.Context block found.; Resource93: No Metadata.com.aws.cloudformation.Context block found.; Resource94: No Metadata.com.aws.cloudformation.Context block found.; Resource95: No Metadata.com.aws.cloudformation.Context block found.; Resource96: No Metadata.com.aws.cloudformation.Context block found.; Resource97: No Metadata.com.aws.cloudformation.Context block found.; Resource98: No Metadata.com.aws.cloudformation.Context block found.; Resource99: No Metadata.com.aws.cloudformation.Context block found.", "source": "ENGINE", "entity": { - "logicalId": "Resource9", + "logicalId": "Resource1", "entityType": "Resource", "resourceType": "AWS::SNS::Topic" }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", "category": "Best Practice", - "startLine": 421, + "startLine": 405, "startColumn": 3, - "endLine": 421, + "endLine": 405, "endColumn": 12, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource10' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource10", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 423, - "startColumn": 3, - "endLine": 423, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource11' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource11", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 425, - "startColumn": 3, - "endLine": 425, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource12' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource12", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 427, - "startColumn": 3, - "endLine": 427, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource13' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource13", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 429, - "startColumn": 3, - "endLine": 429, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource14' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource14", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 431, - "startColumn": 3, - "endLine": 431, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource15' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource15", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 433, - "startColumn": 3, - "endLine": 433, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource16' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource16", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 435, - "startColumn": 3, - "endLine": 435, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource17' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource17", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 437, - "startColumn": 3, - "endLine": 437, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource18' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource18", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 439, - "startColumn": 3, - "endLine": 439, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource19' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource19", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 441, - "startColumn": 3, - "endLine": 441, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource20' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource20", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 443, - "startColumn": 3, - "endLine": 443, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource21' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource21", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 445, - "startColumn": 3, - "endLine": 445, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource22' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource22", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 447, - "startColumn": 3, - "endLine": 447, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource23' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource23", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 449, - "startColumn": 3, - "endLine": 449, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource24' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource24", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 451, - "startColumn": 3, - "endLine": 451, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource25' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource25", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 453, - "startColumn": 3, - "endLine": 453, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource26' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource26", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 455, - "startColumn": 3, - "endLine": 455, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource27' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource27", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 457, - "startColumn": 3, - "endLine": 457, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource28' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource28", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 459, - "startColumn": 3, - "endLine": 459, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource29' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource29", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 461, - "startColumn": 3, - "endLine": 461, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource30' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource30", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 463, - "startColumn": 3, - "endLine": 463, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource31' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource31", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 465, - "startColumn": 3, - "endLine": 465, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource32' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource32", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 467, - "startColumn": 3, - "endLine": 467, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource33' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource33", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 469, - "startColumn": 3, - "endLine": 469, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource34' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource34", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 471, - "startColumn": 3, - "endLine": 471, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource35' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource35", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 473, - "startColumn": 3, - "endLine": 473, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource36' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource36", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 475, - "startColumn": 3, - "endLine": 475, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource37' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource37", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 477, - "startColumn": 3, - "endLine": 477, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource38' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource38", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 479, - "startColumn": 3, - "endLine": 479, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource39' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource39", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 481, - "startColumn": 3, - "endLine": 481, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource40' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource40", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 483, - "startColumn": 3, - "endLine": 483, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource41' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource41", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 485, - "startColumn": 3, - "endLine": 485, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource42' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource42", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 487, - "startColumn": 3, - "endLine": 487, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource43' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource43", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 489, - "startColumn": 3, - "endLine": 489, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource44' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource44", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 491, - "startColumn": 3, - "endLine": 491, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", - "phase": "LINT" - }, - { - "ruleId": "I9040", - "severity": "INFO", - "message": "Resource 'Resource45' of type 'AWS::SNS::Topic' supports Tags but none are configured", - "source": "ENGINE", - "entity": { - "logicalId": "Resource45", - "entityType": "Resource", - "resourceType": "AWS::SNS::Topic" - }, - "propertyPath": "Properties.Tags", - "suggestedFix": "Add Tags to improve resource organization and cost tracking", - "category": "Best Practice", - "startLine": 493, - "startColumn": 3, - "endLine": 493, - "endColumn": 13, - "ruleDescription": "Resource should have Tags", + "relatedResources": [ + { + "resource": { + "id": "Resource10", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 423, + "startColumn": 3, + "endLine": 423, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource100", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 603, + "startColumn": 3, + "endLine": 603, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource101", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 605, + "startColumn": 3, + "endLine": 605, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource102", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 607, + "startColumn": 3, + "endLine": 607, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource103", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 609, + "startColumn": 3, + "endLine": 609, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource104", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 611, + "startColumn": 3, + "endLine": 611, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource105", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 613, + "startColumn": 3, + "endLine": 613, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource106", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 615, + "startColumn": 3, + "endLine": 615, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource107", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 617, + "startColumn": 3, + "endLine": 617, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource108", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 619, + "startColumn": 3, + "endLine": 619, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource109", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 621, + "startColumn": 3, + "endLine": 621, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource11", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 425, + "startColumn": 3, + "endLine": 425, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource110", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 623, + "startColumn": 3, + "endLine": 623, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource111", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 625, + "startColumn": 3, + "endLine": 625, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource112", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 627, + "startColumn": 3, + "endLine": 627, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource113", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 629, + "startColumn": 3, + "endLine": 629, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource114", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 631, + "startColumn": 3, + "endLine": 631, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource115", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 633, + "startColumn": 3, + "endLine": 633, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource116", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 635, + "startColumn": 3, + "endLine": 635, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource117", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 637, + "startColumn": 3, + "endLine": 637, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource118", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 639, + "startColumn": 3, + "endLine": 639, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource119", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 641, + "startColumn": 3, + "endLine": 641, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource12", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 427, + "startColumn": 3, + "endLine": 427, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource120", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 643, + "startColumn": 3, + "endLine": 643, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource121", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 645, + "startColumn": 3, + "endLine": 645, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource122", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 647, + "startColumn": 3, + "endLine": 647, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource123", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 649, + "startColumn": 3, + "endLine": 649, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource124", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 651, + "startColumn": 3, + "endLine": 651, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource125", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 653, + "startColumn": 3, + "endLine": 653, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource126", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 655, + "startColumn": 3, + "endLine": 655, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource127", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 657, + "startColumn": 3, + "endLine": 657, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource128", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 659, + "startColumn": 3, + "endLine": 659, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource129", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 661, + "startColumn": 3, + "endLine": 661, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource13", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 429, + "startColumn": 3, + "endLine": 429, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource130", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 663, + "startColumn": 3, + "endLine": 663, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource131", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 665, + "startColumn": 3, + "endLine": 665, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource132", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 667, + "startColumn": 3, + "endLine": 667, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource133", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 669, + "startColumn": 3, + "endLine": 669, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource134", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 671, + "startColumn": 3, + "endLine": 671, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource135", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 673, + "startColumn": 3, + "endLine": 673, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource136", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 675, + "startColumn": 3, + "endLine": 675, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource137", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 677, + "startColumn": 3, + "endLine": 677, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource138", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 679, + "startColumn": 3, + "endLine": 679, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource139", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 681, + "startColumn": 3, + "endLine": 681, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource14", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 431, + "startColumn": 3, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource140", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 683, + "startColumn": 3, + "endLine": 683, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource141", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 685, + "startColumn": 3, + "endLine": 685, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource142", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 687, + "startColumn": 3, + "endLine": 687, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource143", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 689, + "startColumn": 3, + "endLine": 689, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource144", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 691, + "startColumn": 3, + "endLine": 691, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource145", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 693, + "startColumn": 3, + "endLine": 693, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource146", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 695, + "startColumn": 3, + "endLine": 695, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource147", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 697, + "startColumn": 3, + "endLine": 697, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource148", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 699, + "startColumn": 3, + "endLine": 699, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource149", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 701, + "startColumn": 3, + "endLine": 701, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource15", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 433, + "startColumn": 3, + "endLine": 433, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource150", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 703, + "startColumn": 3, + "endLine": 703, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource151", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 705, + "startColumn": 3, + "endLine": 705, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource152", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 707, + "startColumn": 3, + "endLine": 707, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource153", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 709, + "startColumn": 3, + "endLine": 709, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource154", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 711, + "startColumn": 3, + "endLine": 711, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource155", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 713, + "startColumn": 3, + "endLine": 713, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource156", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 715, + "startColumn": 3, + "endLine": 715, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource157", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 717, + "startColumn": 3, + "endLine": 717, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource158", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 719, + "startColumn": 3, + "endLine": 719, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource159", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 721, + "startColumn": 3, + "endLine": 721, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource16", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 435, + "startColumn": 3, + "endLine": 435, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource160", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 723, + "startColumn": 3, + "endLine": 723, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource161", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 725, + "startColumn": 3, + "endLine": 725, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource162", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 727, + "startColumn": 3, + "endLine": 727, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource163", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 729, + "startColumn": 3, + "endLine": 729, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource164", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 731, + "startColumn": 3, + "endLine": 731, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource165", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 733, + "startColumn": 3, + "endLine": 733, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource166", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 735, + "startColumn": 3, + "endLine": 735, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource167", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 737, + "startColumn": 3, + "endLine": 737, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource168", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 739, + "startColumn": 3, + "endLine": 739, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource169", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 741, + "startColumn": 3, + "endLine": 741, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource17", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 437, + "startColumn": 3, + "endLine": 437, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource170", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 743, + "startColumn": 3, + "endLine": 743, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource171", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 745, + "startColumn": 3, + "endLine": 745, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource172", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 747, + "startColumn": 3, + "endLine": 747, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource173", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 749, + "startColumn": 3, + "endLine": 749, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource174", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 751, + "startColumn": 3, + "endLine": 751, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource175", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 753, + "startColumn": 3, + "endLine": 753, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource176", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 755, + "startColumn": 3, + "endLine": 755, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource177", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 757, + "startColumn": 3, + "endLine": 757, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource178", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 759, + "startColumn": 3, + "endLine": 759, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource179", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 761, + "startColumn": 3, + "endLine": 761, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource18", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 439, + "startColumn": 3, + "endLine": 439, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource180", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 763, + "startColumn": 3, + "endLine": 763, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource181", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 765, + "startColumn": 3, + "endLine": 765, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource182", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 767, + "startColumn": 3, + "endLine": 767, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource183", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 769, + "startColumn": 3, + "endLine": 769, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource184", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 771, + "startColumn": 3, + "endLine": 771, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource185", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 773, + "startColumn": 3, + "endLine": 773, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource186", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 775, + "startColumn": 3, + "endLine": 775, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource187", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 777, + "startColumn": 3, + "endLine": 777, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource188", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 779, + "startColumn": 3, + "endLine": 779, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource189", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 781, + "startColumn": 3, + "endLine": 781, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource19", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 441, + "startColumn": 3, + "endLine": 441, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource190", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 783, + "startColumn": 3, + "endLine": 783, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource191", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 785, + "startColumn": 3, + "endLine": 785, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource192", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 787, + "startColumn": 3, + "endLine": 787, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource193", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 789, + "startColumn": 3, + "endLine": 789, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource194", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 791, + "startColumn": 3, + "endLine": 791, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource195", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 793, + "startColumn": 3, + "endLine": 793, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource196", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 795, + "startColumn": 3, + "endLine": 795, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource197", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 797, + "startColumn": 3, + "endLine": 797, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource198", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 799, + "startColumn": 3, + "endLine": 799, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource199", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 801, + "startColumn": 3, + "endLine": 801, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 407, + "startColumn": 3, + "endLine": 407, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource20", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 443, + "startColumn": 3, + "endLine": 443, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource200", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 803, + "startColumn": 3, + "endLine": 803, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource201", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 805, + "startColumn": 3, + "endLine": 805, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource202", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 807, + "startColumn": 3, + "endLine": 807, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource203", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 809, + "startColumn": 3, + "endLine": 809, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource204", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 811, + "startColumn": 3, + "endLine": 811, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource205", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 813, + "startColumn": 3, + "endLine": 813, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource206", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 815, + "startColumn": 3, + "endLine": 815, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource207", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 817, + "startColumn": 3, + "endLine": 817, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource208", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 819, + "startColumn": 3, + "endLine": 819, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource209", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 821, + "startColumn": 3, + "endLine": 821, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource21", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 445, + "startColumn": 3, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource210", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 823, + "startColumn": 3, + "endLine": 823, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource211", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 825, + "startColumn": 3, + "endLine": 825, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource212", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 827, + "startColumn": 3, + "endLine": 827, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource213", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 829, + "startColumn": 3, + "endLine": 829, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource214", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 831, + "startColumn": 3, + "endLine": 831, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource215", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 833, + "startColumn": 3, + "endLine": 833, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource216", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 835, + "startColumn": 3, + "endLine": 835, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource217", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 837, + "startColumn": 3, + "endLine": 837, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource218", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 839, + "startColumn": 3, + "endLine": 839, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource219", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 841, + "startColumn": 3, + "endLine": 841, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource22", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 447, + "startColumn": 3, + "endLine": 447, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource220", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 843, + "startColumn": 3, + "endLine": 843, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource221", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 845, + "startColumn": 3, + "endLine": 845, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource222", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 847, + "startColumn": 3, + "endLine": 847, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource223", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 849, + "startColumn": 3, + "endLine": 849, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource224", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 851, + "startColumn": 3, + "endLine": 851, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource225", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 853, + "startColumn": 3, + "endLine": 853, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource226", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 855, + "startColumn": 3, + "endLine": 855, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource227", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 857, + "startColumn": 3, + "endLine": 857, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource228", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 859, + "startColumn": 3, + "endLine": 859, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource229", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 861, + "startColumn": 3, + "endLine": 861, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource23", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 449, + "startColumn": 3, + "endLine": 449, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource230", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 863, + "startColumn": 3, + "endLine": 863, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource231", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 865, + "startColumn": 3, + "endLine": 865, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource232", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 867, + "startColumn": 3, + "endLine": 867, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource233", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 869, + "startColumn": 3, + "endLine": 869, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource234", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 871, + "startColumn": 3, + "endLine": 871, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource235", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 873, + "startColumn": 3, + "endLine": 873, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource236", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 875, + "startColumn": 3, + "endLine": 875, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource237", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 877, + "startColumn": 3, + "endLine": 877, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource238", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 879, + "startColumn": 3, + "endLine": 879, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource239", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 881, + "startColumn": 3, + "endLine": 881, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource24", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 451, + "startColumn": 3, + "endLine": 451, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource240", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 883, + "startColumn": 3, + "endLine": 883, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource241", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 885, + "startColumn": 3, + "endLine": 885, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource242", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 887, + "startColumn": 3, + "endLine": 887, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource243", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 889, + "startColumn": 3, + "endLine": 889, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource244", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 891, + "startColumn": 3, + "endLine": 891, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource245", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 893, + "startColumn": 3, + "endLine": 893, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource246", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 895, + "startColumn": 3, + "endLine": 895, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource247", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 897, + "startColumn": 3, + "endLine": 897, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource248", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 899, + "startColumn": 3, + "endLine": 899, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource249", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 901, + "startColumn": 3, + "endLine": 901, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource25", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 453, + "startColumn": 3, + "endLine": 453, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource250", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 903, + "startColumn": 3, + "endLine": 903, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource251", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 905, + "startColumn": 3, + "endLine": 905, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource252", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 907, + "startColumn": 3, + "endLine": 907, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource253", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 909, + "startColumn": 3, + "endLine": 909, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource254", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 911, + "startColumn": 3, + "endLine": 911, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource255", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 913, + "startColumn": 3, + "endLine": 913, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource256", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 915, + "startColumn": 3, + "endLine": 915, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource257", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 917, + "startColumn": 3, + "endLine": 917, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource258", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 919, + "startColumn": 3, + "endLine": 919, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource259", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 921, + "startColumn": 3, + "endLine": 921, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource26", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 455, + "startColumn": 3, + "endLine": 455, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource260", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 923, + "startColumn": 3, + "endLine": 923, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource261", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 925, + "startColumn": 3, + "endLine": 925, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource262", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 927, + "startColumn": 3, + "endLine": 927, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource263", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 929, + "startColumn": 3, + "endLine": 929, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource264", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 931, + "startColumn": 3, + "endLine": 931, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource265", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 933, + "startColumn": 3, + "endLine": 933, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource266", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 935, + "startColumn": 3, + "endLine": 935, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource267", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 937, + "startColumn": 3, + "endLine": 937, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource268", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 939, + "startColumn": 3, + "endLine": 939, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource269", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 941, + "startColumn": 3, + "endLine": 941, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource27", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 457, + "startColumn": 3, + "endLine": 457, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource270", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 943, + "startColumn": 3, + "endLine": 943, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource271", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 945, + "startColumn": 3, + "endLine": 945, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource272", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 947, + "startColumn": 3, + "endLine": 947, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource273", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 949, + "startColumn": 3, + "endLine": 949, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource274", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 951, + "startColumn": 3, + "endLine": 951, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource275", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 953, + "startColumn": 3, + "endLine": 953, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource276", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 955, + "startColumn": 3, + "endLine": 955, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource277", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 957, + "startColumn": 3, + "endLine": 957, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource278", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 959, + "startColumn": 3, + "endLine": 959, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource279", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 961, + "startColumn": 3, + "endLine": 961, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource28", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource280", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 963, + "startColumn": 3, + "endLine": 963, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource281", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 965, + "startColumn": 3, + "endLine": 965, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource282", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 967, + "startColumn": 3, + "endLine": 967, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource283", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 969, + "startColumn": 3, + "endLine": 969, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource284", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 971, + "startColumn": 3, + "endLine": 971, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource285", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 973, + "startColumn": 3, + "endLine": 973, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource286", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 975, + "startColumn": 3, + "endLine": 975, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource287", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 977, + "startColumn": 3, + "endLine": 977, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource288", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 979, + "startColumn": 3, + "endLine": 979, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource289", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 981, + "startColumn": 3, + "endLine": 981, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource29", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 461, + "startColumn": 3, + "endLine": 461, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource290", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 983, + "startColumn": 3, + "endLine": 983, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource291", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 985, + "startColumn": 3, + "endLine": 985, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource292", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 987, + "startColumn": 3, + "endLine": 987, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource293", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 989, + "startColumn": 3, + "endLine": 989, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource294", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 991, + "startColumn": 3, + "endLine": 991, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource295", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 993, + "startColumn": 3, + "endLine": 993, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource296", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 995, + "startColumn": 3, + "endLine": 995, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource297", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 997, + "startColumn": 3, + "endLine": 997, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource298", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 999, + "startColumn": 3, + "endLine": 999, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource299", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1001, + "startColumn": 3, + "endLine": 1001, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource3", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 409, + "startColumn": 3, + "endLine": 409, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource30", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource300", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1003, + "startColumn": 3, + "endLine": 1003, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource301", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1005, + "startColumn": 3, + "endLine": 1005, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource302", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1007, + "startColumn": 3, + "endLine": 1007, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource303", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1009, + "startColumn": 3, + "endLine": 1009, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource304", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1011, + "startColumn": 3, + "endLine": 1011, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource305", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1013, + "startColumn": 3, + "endLine": 1013, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource306", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1015, + "startColumn": 3, + "endLine": 1015, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource307", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1017, + "startColumn": 3, + "endLine": 1017, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource308", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1019, + "startColumn": 3, + "endLine": 1019, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource309", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1021, + "startColumn": 3, + "endLine": 1021, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource31", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 465, + "startColumn": 3, + "endLine": 465, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource310", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1023, + "startColumn": 3, + "endLine": 1023, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource311", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1025, + "startColumn": 3, + "endLine": 1025, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource312", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1027, + "startColumn": 3, + "endLine": 1027, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource313", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1029, + "startColumn": 3, + "endLine": 1029, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource314", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1031, + "startColumn": 3, + "endLine": 1031, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource315", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1033, + "startColumn": 3, + "endLine": 1033, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource316", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1035, + "startColumn": 3, + "endLine": 1035, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource317", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1037, + "startColumn": 3, + "endLine": 1037, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource318", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1039, + "startColumn": 3, + "endLine": 1039, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource319", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1041, + "startColumn": 3, + "endLine": 1041, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource32", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 467, + "startColumn": 3, + "endLine": 467, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource320", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1043, + "startColumn": 3, + "endLine": 1043, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource321", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1045, + "startColumn": 3, + "endLine": 1045, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource322", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1047, + "startColumn": 3, + "endLine": 1047, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource323", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1049, + "startColumn": 3, + "endLine": 1049, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource324", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1051, + "startColumn": 3, + "endLine": 1051, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource325", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1053, + "startColumn": 3, + "endLine": 1053, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource326", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1055, + "startColumn": 3, + "endLine": 1055, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource327", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1057, + "startColumn": 3, + "endLine": 1057, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource328", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1059, + "startColumn": 3, + "endLine": 1059, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource329", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1061, + "startColumn": 3, + "endLine": 1061, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource33", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 469, + "startColumn": 3, + "endLine": 469, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource330", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1063, + "startColumn": 3, + "endLine": 1063, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource331", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1065, + "startColumn": 3, + "endLine": 1065, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource332", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1067, + "startColumn": 3, + "endLine": 1067, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource333", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1069, + "startColumn": 3, + "endLine": 1069, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource334", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1071, + "startColumn": 3, + "endLine": 1071, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource335", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1073, + "startColumn": 3, + "endLine": 1073, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource336", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1075, + "startColumn": 3, + "endLine": 1075, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource337", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1077, + "startColumn": 3, + "endLine": 1077, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource338", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1079, + "startColumn": 3, + "endLine": 1079, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource339", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1081, + "startColumn": 3, + "endLine": 1081, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource34", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 471, + "startColumn": 3, + "endLine": 471, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource340", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1083, + "startColumn": 3, + "endLine": 1083, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource341", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1085, + "startColumn": 3, + "endLine": 1085, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource342", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1087, + "startColumn": 3, + "endLine": 1087, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource343", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1089, + "startColumn": 3, + "endLine": 1089, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource344", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1091, + "startColumn": 3, + "endLine": 1091, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource345", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1093, + "startColumn": 3, + "endLine": 1093, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource346", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1095, + "startColumn": 3, + "endLine": 1095, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource347", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1097, + "startColumn": 3, + "endLine": 1097, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource348", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1099, + "startColumn": 3, + "endLine": 1099, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource349", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1101, + "startColumn": 3, + "endLine": 1101, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource35", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 473, + "startColumn": 3, + "endLine": 473, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource350", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1103, + "startColumn": 3, + "endLine": 1103, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource351", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1105, + "startColumn": 3, + "endLine": 1105, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource352", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1107, + "startColumn": 3, + "endLine": 1107, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource353", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1109, + "startColumn": 3, + "endLine": 1109, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource354", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1111, + "startColumn": 3, + "endLine": 1111, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource355", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1113, + "startColumn": 3, + "endLine": 1113, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource356", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1115, + "startColumn": 3, + "endLine": 1115, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource357", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1117, + "startColumn": 3, + "endLine": 1117, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource358", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1119, + "startColumn": 3, + "endLine": 1119, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource359", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1121, + "startColumn": 3, + "endLine": 1121, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource36", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 475, + "startColumn": 3, + "endLine": 475, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource360", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1123, + "startColumn": 3, + "endLine": 1123, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource361", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1125, + "startColumn": 3, + "endLine": 1125, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource362", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1127, + "startColumn": 3, + "endLine": 1127, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource363", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1129, + "startColumn": 3, + "endLine": 1129, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource364", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1131, + "startColumn": 3, + "endLine": 1131, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource365", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1133, + "startColumn": 3, + "endLine": 1133, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource366", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1135, + "startColumn": 3, + "endLine": 1135, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource367", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1137, + "startColumn": 3, + "endLine": 1137, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource368", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1139, + "startColumn": 3, + "endLine": 1139, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource369", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1141, + "startColumn": 3, + "endLine": 1141, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource37", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 477, + "startColumn": 3, + "endLine": 477, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource370", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1143, + "startColumn": 3, + "endLine": 1143, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource371", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1145, + "startColumn": 3, + "endLine": 1145, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource372", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1147, + "startColumn": 3, + "endLine": 1147, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource373", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1149, + "startColumn": 3, + "endLine": 1149, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource374", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1151, + "startColumn": 3, + "endLine": 1151, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource375", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1153, + "startColumn": 3, + "endLine": 1153, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource376", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1155, + "startColumn": 3, + "endLine": 1155, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource377", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1157, + "startColumn": 3, + "endLine": 1157, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource378", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1159, + "startColumn": 3, + "endLine": 1159, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource379", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1161, + "startColumn": 3, + "endLine": 1161, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource38", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 479, + "startColumn": 3, + "endLine": 479, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource380", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1163, + "startColumn": 3, + "endLine": 1163, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource381", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1165, + "startColumn": 3, + "endLine": 1165, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource382", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1167, + "startColumn": 3, + "endLine": 1167, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource383", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1169, + "startColumn": 3, + "endLine": 1169, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource384", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1171, + "startColumn": 3, + "endLine": 1171, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource385", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1173, + "startColumn": 3, + "endLine": 1173, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource386", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1175, + "startColumn": 3, + "endLine": 1175, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource387", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1177, + "startColumn": 3, + "endLine": 1177, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource388", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1179, + "startColumn": 3, + "endLine": 1179, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource389", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1181, + "startColumn": 3, + "endLine": 1181, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource39", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 481, + "startColumn": 3, + "endLine": 481, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource390", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1183, + "startColumn": 3, + "endLine": 1183, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource391", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1185, + "startColumn": 3, + "endLine": 1185, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource392", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1187, + "startColumn": 3, + "endLine": 1187, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource393", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1189, + "startColumn": 3, + "endLine": 1189, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource394", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1191, + "startColumn": 3, + "endLine": 1191, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource395", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1193, + "startColumn": 3, + "endLine": 1193, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource396", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1195, + "startColumn": 3, + "endLine": 1195, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource397", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1197, + "startColumn": 3, + "endLine": 1197, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource398", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1199, + "startColumn": 3, + "endLine": 1199, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource399", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1201, + "startColumn": 3, + "endLine": 1201, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 411, + "startColumn": 3, + "endLine": 411, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource40", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 483, + "startColumn": 3, + "endLine": 483, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource400", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1203, + "startColumn": 3, + "endLine": 1203, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource401", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1205, + "startColumn": 3, + "endLine": 1205, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource402", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1207, + "startColumn": 3, + "endLine": 1207, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource403", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1209, + "startColumn": 3, + "endLine": 1209, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource404", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1211, + "startColumn": 3, + "endLine": 1211, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource405", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1213, + "startColumn": 3, + "endLine": 1213, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource406", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1215, + "startColumn": 3, + "endLine": 1215, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource407", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1217, + "startColumn": 3, + "endLine": 1217, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource408", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1219, + "startColumn": 3, + "endLine": 1219, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource409", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1221, + "startColumn": 3, + "endLine": 1221, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource41", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 485, + "startColumn": 3, + "endLine": 485, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource410", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1223, + "startColumn": 3, + "endLine": 1223, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource411", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1225, + "startColumn": 3, + "endLine": 1225, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource412", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1227, + "startColumn": 3, + "endLine": 1227, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource413", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1229, + "startColumn": 3, + "endLine": 1229, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource414", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1231, + "startColumn": 3, + "endLine": 1231, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource415", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1233, + "startColumn": 3, + "endLine": 1233, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource416", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1235, + "startColumn": 3, + "endLine": 1235, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource417", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1237, + "startColumn": 3, + "endLine": 1237, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource418", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1239, + "startColumn": 3, + "endLine": 1239, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource419", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1241, + "startColumn": 3, + "endLine": 1241, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource42", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 487, + "startColumn": 3, + "endLine": 487, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource420", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1243, + "startColumn": 3, + "endLine": 1243, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource421", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1245, + "startColumn": 3, + "endLine": 1245, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource422", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1247, + "startColumn": 3, + "endLine": 1247, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource423", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1249, + "startColumn": 3, + "endLine": 1249, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource424", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1251, + "startColumn": 3, + "endLine": 1251, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource425", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1253, + "startColumn": 3, + "endLine": 1253, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource426", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1255, + "startColumn": 3, + "endLine": 1255, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource427", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1257, + "startColumn": 3, + "endLine": 1257, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource428", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1259, + "startColumn": 3, + "endLine": 1259, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource429", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1261, + "startColumn": 3, + "endLine": 1261, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource43", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 489, + "startColumn": 3, + "endLine": 489, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource430", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1263, + "startColumn": 3, + "endLine": 1263, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource431", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1265, + "startColumn": 3, + "endLine": 1265, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource432", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1267, + "startColumn": 3, + "endLine": 1267, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource433", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1269, + "startColumn": 3, + "endLine": 1269, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource434", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1271, + "startColumn": 3, + "endLine": 1271, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource435", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1273, + "startColumn": 3, + "endLine": 1273, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource436", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1275, + "startColumn": 3, + "endLine": 1275, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource437", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1277, + "startColumn": 3, + "endLine": 1277, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource438", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1279, + "startColumn": 3, + "endLine": 1279, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource439", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1281, + "startColumn": 3, + "endLine": 1281, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource44", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 491, + "startColumn": 3, + "endLine": 491, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource440", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1283, + "startColumn": 3, + "endLine": 1283, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource441", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1285, + "startColumn": 3, + "endLine": 1285, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource442", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1287, + "startColumn": 3, + "endLine": 1287, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource443", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1289, + "startColumn": 3, + "endLine": 1289, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource444", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1291, + "startColumn": 3, + "endLine": 1291, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource445", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1293, + "startColumn": 3, + "endLine": 1293, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource446", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1295, + "startColumn": 3, + "endLine": 1295, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource447", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1297, + "startColumn": 3, + "endLine": 1297, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource448", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1299, + "startColumn": 3, + "endLine": 1299, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource449", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1301, + "startColumn": 3, + "endLine": 1301, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource45", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 493, + "startColumn": 3, + "endLine": 493, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource450", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1303, + "startColumn": 3, + "endLine": 1303, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource451", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1305, + "startColumn": 3, + "endLine": 1305, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource452", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1307, + "startColumn": 3, + "endLine": 1307, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource453", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1309, + "startColumn": 3, + "endLine": 1309, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource454", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1311, + "startColumn": 3, + "endLine": 1311, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource455", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1313, + "startColumn": 3, + "endLine": 1313, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource456", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1315, + "startColumn": 3, + "endLine": 1315, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource457", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1317, + "startColumn": 3, + "endLine": 1317, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource458", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1319, + "startColumn": 3, + "endLine": 1319, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource459", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1321, + "startColumn": 3, + "endLine": 1321, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource46", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 495, + "startColumn": 3, + "endLine": 495, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource460", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1323, + "startColumn": 3, + "endLine": 1323, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource461", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1325, + "startColumn": 3, + "endLine": 1325, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource462", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1327, + "startColumn": 3, + "endLine": 1327, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource463", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1329, + "startColumn": 3, + "endLine": 1329, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource464", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1331, + "startColumn": 3, + "endLine": 1331, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource465", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1333, + "startColumn": 3, + "endLine": 1333, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource466", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1335, + "startColumn": 3, + "endLine": 1335, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource467", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1337, + "startColumn": 3, + "endLine": 1337, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource468", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1339, + "startColumn": 3, + "endLine": 1339, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource469", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1341, + "startColumn": 3, + "endLine": 1341, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource47", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 497, + "startColumn": 3, + "endLine": 497, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource470", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1343, + "startColumn": 3, + "endLine": 1343, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource471", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1345, + "startColumn": 3, + "endLine": 1345, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource472", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1347, + "startColumn": 3, + "endLine": 1347, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource473", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1349, + "startColumn": 3, + "endLine": 1349, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource474", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1351, + "startColumn": 3, + "endLine": 1351, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource475", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1353, + "startColumn": 3, + "endLine": 1353, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource476", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1355, + "startColumn": 3, + "endLine": 1355, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource477", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1357, + "startColumn": 3, + "endLine": 1357, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource478", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1359, + "startColumn": 3, + "endLine": 1359, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource479", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1361, + "startColumn": 3, + "endLine": 1361, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource48", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 499, + "startColumn": 3, + "endLine": 499, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource480", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1363, + "startColumn": 3, + "endLine": 1363, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource481", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1365, + "startColumn": 3, + "endLine": 1365, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource482", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1367, + "startColumn": 3, + "endLine": 1367, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource483", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1369, + "startColumn": 3, + "endLine": 1369, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource484", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1371, + "startColumn": 3, + "endLine": 1371, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource485", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1373, + "startColumn": 3, + "endLine": 1373, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource486", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1375, + "startColumn": 3, + "endLine": 1375, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource487", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1377, + "startColumn": 3, + "endLine": 1377, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource488", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1379, + "startColumn": 3, + "endLine": 1379, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource489", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1381, + "startColumn": 3, + "endLine": 1381, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource49", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 501, + "startColumn": 3, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource490", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1383, + "startColumn": 3, + "endLine": 1383, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource491", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1385, + "startColumn": 3, + "endLine": 1385, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource492", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1387, + "startColumn": 3, + "endLine": 1387, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource493", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1389, + "startColumn": 3, + "endLine": 1389, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource494", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1391, + "startColumn": 3, + "endLine": 1391, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource495", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1393, + "startColumn": 3, + "endLine": 1393, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource496", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1395, + "startColumn": 3, + "endLine": 1395, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource497", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1397, + "startColumn": 3, + "endLine": 1397, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource498", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1399, + "startColumn": 3, + "endLine": 1399, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource499", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1401, + "startColumn": 3, + "endLine": 1401, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource5", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 413, + "startColumn": 3, + "endLine": 413, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource50", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 503, + "startColumn": 3, + "endLine": 503, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource500", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1403, + "startColumn": 3, + "endLine": 1403, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource501", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1405, + "startColumn": 3, + "endLine": 1405, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource51", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 505, + "startColumn": 3, + "endLine": 505, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource52", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 507, + "startColumn": 3, + "endLine": 507, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource53", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 509, + "startColumn": 3, + "endLine": 509, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource54", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 511, + "startColumn": 3, + "endLine": 511, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource55", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 513, + "startColumn": 3, + "endLine": 513, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource56", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 515, + "startColumn": 3, + "endLine": 515, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource57", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 517, + "startColumn": 3, + "endLine": 517, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource58", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 519, + "startColumn": 3, + "endLine": 519, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource59", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 521, + "startColumn": 3, + "endLine": 521, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource6", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 415, + "startColumn": 3, + "endLine": 415, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource60", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 523, + "startColumn": 3, + "endLine": 523, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource61", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 525, + "startColumn": 3, + "endLine": 525, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource62", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 527, + "startColumn": 3, + "endLine": 527, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource63", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 529, + "startColumn": 3, + "endLine": 529, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource64", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 531, + "startColumn": 3, + "endLine": 531, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource65", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 533, + "startColumn": 3, + "endLine": 533, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource66", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 535, + "startColumn": 3, + "endLine": 535, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource67", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 537, + "startColumn": 3, + "endLine": 537, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource68", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 539, + "startColumn": 3, + "endLine": 539, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource69", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 541, + "startColumn": 3, + "endLine": 541, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource7", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 417, + "startColumn": 3, + "endLine": 417, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource70", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 543, + "startColumn": 3, + "endLine": 543, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource71", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 545, + "startColumn": 3, + "endLine": 545, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource72", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 547, + "startColumn": 3, + "endLine": 547, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource73", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 549, + "startColumn": 3, + "endLine": 549, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource74", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 551, + "startColumn": 3, + "endLine": 551, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource75", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 553, + "startColumn": 3, + "endLine": 553, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource76", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 555, + "startColumn": 3, + "endLine": 555, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource77", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 557, + "startColumn": 3, + "endLine": 557, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource78", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 559, + "startColumn": 3, + "endLine": 559, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource79", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 561, + "startColumn": 3, + "endLine": 561, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource8", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 419, + "startColumn": 3, + "endLine": 419, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource80", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 563, + "startColumn": 3, + "endLine": 563, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource81", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 565, + "startColumn": 3, + "endLine": 565, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource82", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 567, + "startColumn": 3, + "endLine": 567, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource83", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 569, + "startColumn": 3, + "endLine": 569, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource84", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 571, + "startColumn": 3, + "endLine": 571, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource85", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 573, + "startColumn": 3, + "endLine": 573, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource86", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 575, + "startColumn": 3, + "endLine": 575, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource87", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 577, + "startColumn": 3, + "endLine": 577, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource88", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 579, + "startColumn": 3, + "endLine": 579, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource89", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 581, + "startColumn": 3, + "endLine": 581, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource9", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 421, + "startColumn": 3, + "endLine": 421, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource90", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 583, + "startColumn": 3, + "endLine": 583, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource91", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 585, + "startColumn": 3, + "endLine": 585, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource92", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 587, + "startColumn": 3, + "endLine": 587, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource93", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 589, + "startColumn": 3, + "endLine": 589, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource94", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 591, + "startColumn": 3, + "endLine": 591, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource95", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource96", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 595, + "startColumn": 3, + "endLine": 595, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource97", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 597, + "startColumn": 3, + "endLine": 597, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource98", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 599, + "startColumn": 3, + "endLine": 599, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource99", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 601, + "startColumn": 3, + "endLine": 601, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource1' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource1", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 405, + "startColumn": 3, + "endLine": 405, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource2' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource2", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 407, + "startColumn": 3, + "endLine": 407, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource3' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource3", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 409, + "startColumn": 3, + "endLine": 409, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource4' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource4", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 411, + "startColumn": 3, + "endLine": 411, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource5' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource5", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 413, + "startColumn": 3, + "endLine": 413, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource6' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource6", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 415, + "startColumn": 3, + "endLine": 415, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource7' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource7", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 417, + "startColumn": 3, + "endLine": 417, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource8' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource8", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 419, + "startColumn": 3, + "endLine": 419, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource9' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource9", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 421, + "startColumn": 3, + "endLine": 421, + "endColumn": 12, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource10' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource10", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 423, + "startColumn": 3, + "endLine": 423, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource11' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource11", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 425, + "startColumn": 3, + "endLine": 425, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource12' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource12", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 427, + "startColumn": 3, + "endLine": 427, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource13' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource13", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 429, + "startColumn": 3, + "endLine": 429, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource14' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource14", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 431, + "startColumn": 3, + "endLine": 431, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource15' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource15", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 433, + "startColumn": 3, + "endLine": 433, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource16' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource16", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 435, + "startColumn": 3, + "endLine": 435, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource17' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource17", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 437, + "startColumn": 3, + "endLine": 437, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource18' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource18", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 439, + "startColumn": 3, + "endLine": 439, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource19' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource19", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 441, + "startColumn": 3, + "endLine": 441, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource20' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource20", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 443, + "startColumn": 3, + "endLine": 443, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource21' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource21", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 445, + "startColumn": 3, + "endLine": 445, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource22' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource22", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 447, + "startColumn": 3, + "endLine": 447, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource23' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource23", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 449, + "startColumn": 3, + "endLine": 449, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource24' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource24", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 451, + "startColumn": 3, + "endLine": 451, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource25' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource25", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 453, + "startColumn": 3, + "endLine": 453, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource26' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource26", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 455, + "startColumn": 3, + "endLine": 455, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource27' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource27", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 457, + "startColumn": 3, + "endLine": 457, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource28' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource28", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource29' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource29", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 461, + "startColumn": 3, + "endLine": 461, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource30' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource30", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 463, + "startColumn": 3, + "endLine": 463, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource31' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource31", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 465, + "startColumn": 3, + "endLine": 465, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource32' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource32", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 467, + "startColumn": 3, + "endLine": 467, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource33' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource33", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 469, + "startColumn": 3, + "endLine": 469, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource34' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource34", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 471, + "startColumn": 3, + "endLine": 471, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource35' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource35", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 473, + "startColumn": 3, + "endLine": 473, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource36' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource36", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 475, + "startColumn": 3, + "endLine": 475, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource37' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource37", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 477, + "startColumn": 3, + "endLine": 477, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource38' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource38", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 479, + "startColumn": 3, + "endLine": 479, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource39' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource39", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 481, + "startColumn": 3, + "endLine": 481, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource40' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource40", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 483, + "startColumn": 3, + "endLine": 483, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource41' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource41", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 485, + "startColumn": 3, + "endLine": 485, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource42' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource42", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 487, + "startColumn": 3, + "endLine": 487, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource43' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource43", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 489, + "startColumn": 3, + "endLine": 489, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource44' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource44", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 491, + "startColumn": 3, + "endLine": 491, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'Resource45' of type 'AWS::SNS::Topic' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "Resource45", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 493, + "startColumn": 3, + "endLine": 493, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", "phase": "LINT" }, { @@ -35937,7 +47951,7 @@ "counts": { "fatal": 1, "errors": 299, - "warnings": 897, + "warnings": 899, "informational": 898, "debug": 0 }, @@ -59879,6 +71893,3921 @@ "ruleDescription": "Sub isn't needed if it doesn't have a variable defined", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (299 resource(s)): Resource1: No Metadata.com.aws.cloudformation.Context block found.; Resource10: No Metadata.com.aws.cloudformation.Context block found.; Resource100: No Metadata.com.aws.cloudformation.Context block found.; Resource101: No Metadata.com.aws.cloudformation.Context block found.; Resource102: No Metadata.com.aws.cloudformation.Context block found.; Resource103: No Metadata.com.aws.cloudformation.Context block found.; Resource104: No Metadata.com.aws.cloudformation.Context block found.; Resource105: No Metadata.com.aws.cloudformation.Context block found.; Resource106: No Metadata.com.aws.cloudformation.Context block found.; Resource107: No Metadata.com.aws.cloudformation.Context block found.; Resource108: No Metadata.com.aws.cloudformation.Context block found.; Resource109: No Metadata.com.aws.cloudformation.Context block found.; Resource11: No Metadata.com.aws.cloudformation.Context block found.; Resource110: No Metadata.com.aws.cloudformation.Context block found.; Resource111: No Metadata.com.aws.cloudformation.Context block found.; Resource112: No Metadata.com.aws.cloudformation.Context block found.; Resource113: No Metadata.com.aws.cloudformation.Context block found.; Resource114: No Metadata.com.aws.cloudformation.Context block found.; Resource115: No Metadata.com.aws.cloudformation.Context block found.; Resource116: No Metadata.com.aws.cloudformation.Context block found.; Resource117: No Metadata.com.aws.cloudformation.Context block found.; Resource118: No Metadata.com.aws.cloudformation.Context block found.; Resource119: No Metadata.com.aws.cloudformation.Context block found.; Resource12: No Metadata.com.aws.cloudformation.Context block found.; Resource120: No Metadata.com.aws.cloudformation.Context block found.; Resource121: No Metadata.com.aws.cloudformation.Context block found.; Resource122: No Metadata.com.aws.cloudformation.Context block found.; Resource123: No Metadata.com.aws.cloudformation.Context block found.; Resource124: No Metadata.com.aws.cloudformation.Context block found.; Resource125: No Metadata.com.aws.cloudformation.Context block found.; Resource126: No Metadata.com.aws.cloudformation.Context block found.; Resource127: No Metadata.com.aws.cloudformation.Context block found.; Resource128: No Metadata.com.aws.cloudformation.Context block found.; Resource129: No Metadata.com.aws.cloudformation.Context block found.; Resource13: No Metadata.com.aws.cloudformation.Context block found.; Resource130: No Metadata.com.aws.cloudformation.Context block found.; Resource131: No Metadata.com.aws.cloudformation.Context block found.; Resource132: No Metadata.com.aws.cloudformation.Context block found.; Resource133: No Metadata.com.aws.cloudformation.Context block found.; Resource134: No Metadata.com.aws.cloudformation.Context block found.; Resource135: No Metadata.com.aws.cloudformation.Context block found.; Resource136: No Metadata.com.aws.cloudformation.Context block found.; Resource137: No Metadata.com.aws.cloudformation.Context block found.; Resource138: No Metadata.com.aws.cloudformation.Context block found.; Resource139: No Metadata.com.aws.cloudformation.Context block found.; Resource14: No Metadata.com.aws.cloudformation.Context block found.; Resource140: No Metadata.com.aws.cloudformation.Context block found.; Resource141: No Metadata.com.aws.cloudformation.Context block found.; Resource142: No Metadata.com.aws.cloudformation.Context block found.; Resource143: No Metadata.com.aws.cloudformation.Context block found.; Resource144: No Metadata.com.aws.cloudformation.Context block found.; Resource145: No Metadata.com.aws.cloudformation.Context block found.; Resource146: No Metadata.com.aws.cloudformation.Context block found.; Resource147: No Metadata.com.aws.cloudformation.Context block found.; Resource148: No Metadata.com.aws.cloudformation.Context block found.; Resource149: No Metadata.com.aws.cloudformation.Context block found.; Resource15: No Metadata.com.aws.cloudformation.Context block found.; Resource150: No Metadata.com.aws.cloudformation.Context block found.; Resource151: No Metadata.com.aws.cloudformation.Context block found.; Resource152: No Metadata.com.aws.cloudformation.Context block found.; Resource153: No Metadata.com.aws.cloudformation.Context block found.; Resource154: No Metadata.com.aws.cloudformation.Context block found.; Resource155: No Metadata.com.aws.cloudformation.Context block found.; Resource156: No Metadata.com.aws.cloudformation.Context block found.; Resource157: No Metadata.com.aws.cloudformation.Context block found.; Resource158: No Metadata.com.aws.cloudformation.Context block found.; Resource159: No Metadata.com.aws.cloudformation.Context block found.; Resource16: No Metadata.com.aws.cloudformation.Context block found.; Resource160: No Metadata.com.aws.cloudformation.Context block found.; Resource161: No Metadata.com.aws.cloudformation.Context block found.; Resource162: No Metadata.com.aws.cloudformation.Context block found.; Resource163: No Metadata.com.aws.cloudformation.Context block found.; Resource164: No Metadata.com.aws.cloudformation.Context block found.; Resource165: No Metadata.com.aws.cloudformation.Context block found.; Resource166: No Metadata.com.aws.cloudformation.Context block found.; Resource167: No Metadata.com.aws.cloudformation.Context block found.; Resource168: No Metadata.com.aws.cloudformation.Context block found.; Resource169: No Metadata.com.aws.cloudformation.Context block found.; Resource17: No Metadata.com.aws.cloudformation.Context block found.; Resource170: No Metadata.com.aws.cloudformation.Context block found.; Resource171: No Metadata.com.aws.cloudformation.Context block found.; Resource172: No Metadata.com.aws.cloudformation.Context block found.; Resource173: No Metadata.com.aws.cloudformation.Context block found.; Resource174: No Metadata.com.aws.cloudformation.Context block found.; Resource175: No Metadata.com.aws.cloudformation.Context block found.; Resource176: No Metadata.com.aws.cloudformation.Context block found.; Resource177: No Metadata.com.aws.cloudformation.Context block found.; Resource178: No Metadata.com.aws.cloudformation.Context block found.; Resource179: No Metadata.com.aws.cloudformation.Context block found.; Resource18: No Metadata.com.aws.cloudformation.Context block found.; Resource180: No Metadata.com.aws.cloudformation.Context block found.; Resource181: No Metadata.com.aws.cloudformation.Context block found.; Resource182: No Metadata.com.aws.cloudformation.Context block found.; Resource183: No Metadata.com.aws.cloudformation.Context block found.; Resource184: No Metadata.com.aws.cloudformation.Context block found.; Resource185: No Metadata.com.aws.cloudformation.Context block found.; Resource186: No Metadata.com.aws.cloudformation.Context block found.; Resource187: No Metadata.com.aws.cloudformation.Context block found.; Resource188: No Metadata.com.aws.cloudformation.Context block found.; Resource189: No Metadata.com.aws.cloudformation.Context block found.; Resource19: No Metadata.com.aws.cloudformation.Context block found.; Resource190: No Metadata.com.aws.cloudformation.Context block found.; Resource191: No Metadata.com.aws.cloudformation.Context block found.; Resource192: No Metadata.com.aws.cloudformation.Context block found.; Resource193: No Metadata.com.aws.cloudformation.Context block found.; Resource194: No Metadata.com.aws.cloudformation.Context block found.; Resource195: No Metadata.com.aws.cloudformation.Context block found.; Resource196: No Metadata.com.aws.cloudformation.Context block found.; Resource197: No Metadata.com.aws.cloudformation.Context block found.; Resource198: No Metadata.com.aws.cloudformation.Context block found.; Resource199: No Metadata.com.aws.cloudformation.Context block found.; Resource2: No Metadata.com.aws.cloudformation.Context block found.; Resource20: No Metadata.com.aws.cloudformation.Context block found.; Resource200: No Metadata.com.aws.cloudformation.Context block found.; Resource201: No Metadata.com.aws.cloudformation.Context block found.; Resource202: No Metadata.com.aws.cloudformation.Context block found.; Resource203: No Metadata.com.aws.cloudformation.Context block found.; Resource204: No Metadata.com.aws.cloudformation.Context block found.; Resource205: No Metadata.com.aws.cloudformation.Context block found.; Resource206: No Metadata.com.aws.cloudformation.Context block found.; Resource207: No Metadata.com.aws.cloudformation.Context block found.; Resource208: No Metadata.com.aws.cloudformation.Context block found.; Resource209: No Metadata.com.aws.cloudformation.Context block found.; Resource21: No Metadata.com.aws.cloudformation.Context block found.; Resource210: No Metadata.com.aws.cloudformation.Context block found.; Resource211: No Metadata.com.aws.cloudformation.Context block found.; Resource212: No Metadata.com.aws.cloudformation.Context block found.; Resource213: No Metadata.com.aws.cloudformation.Context block found.; Resource214: No Metadata.com.aws.cloudformation.Context block found.; Resource215: No Metadata.com.aws.cloudformation.Context block found.; Resource216: No Metadata.com.aws.cloudformation.Context block found.; Resource217: No Metadata.com.aws.cloudformation.Context block found.; Resource218: No Metadata.com.aws.cloudformation.Context block found.; Resource219: No Metadata.com.aws.cloudformation.Context block found.; Resource22: No Metadata.com.aws.cloudformation.Context block found.; Resource220: No Metadata.com.aws.cloudformation.Context block found.; Resource221: No Metadata.com.aws.cloudformation.Context block found.; Resource222: No Metadata.com.aws.cloudformation.Context block found.; Resource223: No Metadata.com.aws.cloudformation.Context block found.; Resource224: No Metadata.com.aws.cloudformation.Context block found.; Resource225: No Metadata.com.aws.cloudformation.Context block found.; Resource226: No Metadata.com.aws.cloudformation.Context block found.; Resource227: No Metadata.com.aws.cloudformation.Context block found.; Resource228: No Metadata.com.aws.cloudformation.Context block found.; Resource229: No Metadata.com.aws.cloudformation.Context block found.; Resource23: No Metadata.com.aws.cloudformation.Context block found.; Resource230: No Metadata.com.aws.cloudformation.Context block found.; Resource231: No Metadata.com.aws.cloudformation.Context block found.; Resource232: No Metadata.com.aws.cloudformation.Context block found.; Resource233: No Metadata.com.aws.cloudformation.Context block found.; Resource234: No Metadata.com.aws.cloudformation.Context block found.; Resource235: No Metadata.com.aws.cloudformation.Context block found.; Resource236: No Metadata.com.aws.cloudformation.Context block found.; Resource237: No Metadata.com.aws.cloudformation.Context block found.; Resource238: No Metadata.com.aws.cloudformation.Context block found.; Resource239: No Metadata.com.aws.cloudformation.Context block found.; Resource24: No Metadata.com.aws.cloudformation.Context block found.; Resource240: No Metadata.com.aws.cloudformation.Context block found.; Resource241: No Metadata.com.aws.cloudformation.Context block found.; Resource242: No Metadata.com.aws.cloudformation.Context block found.; Resource243: No Metadata.com.aws.cloudformation.Context block found.; Resource244: No Metadata.com.aws.cloudformation.Context block found.; Resource245: No Metadata.com.aws.cloudformation.Context block found.; Resource246: No Metadata.com.aws.cloudformation.Context block found.; Resource247: No Metadata.com.aws.cloudformation.Context block found.; Resource248: No Metadata.com.aws.cloudformation.Context block found.; Resource249: No Metadata.com.aws.cloudformation.Context block found.; Resource25: No Metadata.com.aws.cloudformation.Context block found.; Resource250: No Metadata.com.aws.cloudformation.Context block found.; Resource251: No Metadata.com.aws.cloudformation.Context block found.; Resource252: No Metadata.com.aws.cloudformation.Context block found.; Resource253: No Metadata.com.aws.cloudformation.Context block found.; Resource254: No Metadata.com.aws.cloudformation.Context block found.; Resource255: No Metadata.com.aws.cloudformation.Context block found.; Resource256: No Metadata.com.aws.cloudformation.Context block found.; Resource257: No Metadata.com.aws.cloudformation.Context block found.; Resource258: No Metadata.com.aws.cloudformation.Context block found.; Resource259: No Metadata.com.aws.cloudformation.Context block found.; Resource26: No Metadata.com.aws.cloudformation.Context block found.; Resource260: No Metadata.com.aws.cloudformation.Context block found.; Resource261: No Metadata.com.aws.cloudformation.Context block found.; Resource262: No Metadata.com.aws.cloudformation.Context block found.; Resource263: No Metadata.com.aws.cloudformation.Context block found.; Resource264: No Metadata.com.aws.cloudformation.Context block found.; Resource265: No Metadata.com.aws.cloudformation.Context block found.; Resource266: No Metadata.com.aws.cloudformation.Context block found.; Resource267: No Metadata.com.aws.cloudformation.Context block found.; Resource268: No Metadata.com.aws.cloudformation.Context block found.; Resource269: No Metadata.com.aws.cloudformation.Context block found.; Resource27: No Metadata.com.aws.cloudformation.Context block found.; Resource270: No Metadata.com.aws.cloudformation.Context block found.; Resource271: No Metadata.com.aws.cloudformation.Context block found.; Resource272: No Metadata.com.aws.cloudformation.Context block found.; Resource273: No Metadata.com.aws.cloudformation.Context block found.; Resource274: No Metadata.com.aws.cloudformation.Context block found.; Resource275: No Metadata.com.aws.cloudformation.Context block found.; Resource276: No Metadata.com.aws.cloudformation.Context block found.; Resource277: No Metadata.com.aws.cloudformation.Context block found.; Resource278: No Metadata.com.aws.cloudformation.Context block found.; Resource279: No Metadata.com.aws.cloudformation.Context block found.; Resource28: No Metadata.com.aws.cloudformation.Context block found.; Resource280: No Metadata.com.aws.cloudformation.Context block found.; Resource281: No Metadata.com.aws.cloudformation.Context block found.; Resource282: No Metadata.com.aws.cloudformation.Context block found.; Resource283: No Metadata.com.aws.cloudformation.Context block found.; Resource284: No Metadata.com.aws.cloudformation.Context block found.; Resource285: No Metadata.com.aws.cloudformation.Context block found.; Resource286: No Metadata.com.aws.cloudformation.Context block found.; Resource287: No Metadata.com.aws.cloudformation.Context block found.; Resource288: No Metadata.com.aws.cloudformation.Context block found.; Resource289: No Metadata.com.aws.cloudformation.Context block found.; Resource29: No Metadata.com.aws.cloudformation.Context block found.; Resource290: No Metadata.com.aws.cloudformation.Context block found.; Resource291: No Metadata.com.aws.cloudformation.Context block found.; Resource292: No Metadata.com.aws.cloudformation.Context block found.; Resource293: No Metadata.com.aws.cloudformation.Context block found.; Resource294: No Metadata.com.aws.cloudformation.Context block found.; Resource295: No Metadata.com.aws.cloudformation.Context block found.; Resource296: No Metadata.com.aws.cloudformation.Context block found.; Resource297: No Metadata.com.aws.cloudformation.Context block found.; Resource298: No Metadata.com.aws.cloudformation.Context block found.; Resource299: No Metadata.com.aws.cloudformation.Context block found.; Resource3: No Metadata.com.aws.cloudformation.Context block found.; Resource30: No Metadata.com.aws.cloudformation.Context block found.; Resource31: No Metadata.com.aws.cloudformation.Context block found.; Resource32: No Metadata.com.aws.cloudformation.Context block found.; Resource33: No Metadata.com.aws.cloudformation.Context block found.; Resource34: No Metadata.com.aws.cloudformation.Context block found.; Resource35: No Metadata.com.aws.cloudformation.Context block found.; Resource36: No Metadata.com.aws.cloudformation.Context block found.; Resource37: No Metadata.com.aws.cloudformation.Context block found.; Resource38: No Metadata.com.aws.cloudformation.Context block found.; Resource39: No Metadata.com.aws.cloudformation.Context block found.; Resource4: No Metadata.com.aws.cloudformation.Context block found.; Resource40: No Metadata.com.aws.cloudformation.Context block found.; Resource41: No Metadata.com.aws.cloudformation.Context block found.; Resource42: No Metadata.com.aws.cloudformation.Context block found.; Resource43: No Metadata.com.aws.cloudformation.Context block found.; Resource44: No Metadata.com.aws.cloudformation.Context block found.; Resource45: No Metadata.com.aws.cloudformation.Context block found.; Resource46: No Metadata.com.aws.cloudformation.Context block found.; Resource47: No Metadata.com.aws.cloudformation.Context block found.; Resource48: No Metadata.com.aws.cloudformation.Context block found.; Resource49: No Metadata.com.aws.cloudformation.Context block found.; Resource5: No Metadata.com.aws.cloudformation.Context block found.; Resource50: No Metadata.com.aws.cloudformation.Context block found.; Resource51: No Metadata.com.aws.cloudformation.Context block found.; Resource52: No Metadata.com.aws.cloudformation.Context block found.; Resource53: No Metadata.com.aws.cloudformation.Context block found.; Resource54: No Metadata.com.aws.cloudformation.Context block found.; Resource55: No Metadata.com.aws.cloudformation.Context block found.; Resource56: No Metadata.com.aws.cloudformation.Context block found.; Resource57: No Metadata.com.aws.cloudformation.Context block found.; Resource58: No Metadata.com.aws.cloudformation.Context block found.; Resource59: No Metadata.com.aws.cloudformation.Context block found.; Resource6: No Metadata.com.aws.cloudformation.Context block found.; Resource60: No Metadata.com.aws.cloudformation.Context block found.; Resource61: No Metadata.com.aws.cloudformation.Context block found.; Resource62: No Metadata.com.aws.cloudformation.Context block found.; Resource63: No Metadata.com.aws.cloudformation.Context block found.; Resource64: No Metadata.com.aws.cloudformation.Context block found.; Resource65: No Metadata.com.aws.cloudformation.Context block found.; Resource66: No Metadata.com.aws.cloudformation.Context block found.; Resource67: No Metadata.com.aws.cloudformation.Context block found.; Resource68: No Metadata.com.aws.cloudformation.Context block found.; Resource69: No Metadata.com.aws.cloudformation.Context block found.; Resource7: No Metadata.com.aws.cloudformation.Context block found.; Resource70: No Metadata.com.aws.cloudformation.Context block found.; Resource71: No Metadata.com.aws.cloudformation.Context block found.; Resource72: No Metadata.com.aws.cloudformation.Context block found.; Resource73: No Metadata.com.aws.cloudformation.Context block found.; Resource74: No Metadata.com.aws.cloudformation.Context block found.; Resource75: No Metadata.com.aws.cloudformation.Context block found.; Resource76: No Metadata.com.aws.cloudformation.Context block found.; Resource77: No Metadata.com.aws.cloudformation.Context block found.; Resource78: No Metadata.com.aws.cloudformation.Context block found.; Resource79: No Metadata.com.aws.cloudformation.Context block found.; Resource8: No Metadata.com.aws.cloudformation.Context block found.; Resource80: No Metadata.com.aws.cloudformation.Context block found.; Resource81: No Metadata.com.aws.cloudformation.Context block found.; Resource82: No Metadata.com.aws.cloudformation.Context block found.; Resource83: No Metadata.com.aws.cloudformation.Context block found.; Resource84: No Metadata.com.aws.cloudformation.Context block found.; Resource85: No Metadata.com.aws.cloudformation.Context block found.; Resource86: No Metadata.com.aws.cloudformation.Context block found.; Resource87: No Metadata.com.aws.cloudformation.Context block found.; Resource88: No Metadata.com.aws.cloudformation.Context block found.; Resource89: No Metadata.com.aws.cloudformation.Context block found.; Resource9: No Metadata.com.aws.cloudformation.Context block found.; Resource90: No Metadata.com.aws.cloudformation.Context block found.; Resource91: No Metadata.com.aws.cloudformation.Context block found.; Resource92: No Metadata.com.aws.cloudformation.Context block found.; Resource93: No Metadata.com.aws.cloudformation.Context block found.; Resource94: No Metadata.com.aws.cloudformation.Context block found.; Resource95: No Metadata.com.aws.cloudformation.Context block found.; Resource96: No Metadata.com.aws.cloudformation.Context block found.; Resource97: No Metadata.com.aws.cloudformation.Context block found.; Resource98: No Metadata.com.aws.cloudformation.Context block found.; Resource99: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Resource1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Resource10", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 897, + "startColumn": 5, + "endLine": 897, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource100", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9807, + "startColumn": 5, + "endLine": 9807, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource101", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9906, + "startColumn": 5, + "endLine": 9906, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource102", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10005, + "startColumn": 5, + "endLine": 10005, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource103", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10104, + "startColumn": 5, + "endLine": 10104, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource104", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10203, + "startColumn": 5, + "endLine": 10203, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource105", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10302, + "startColumn": 5, + "endLine": 10302, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource106", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10401, + "startColumn": 5, + "endLine": 10401, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource107", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10500, + "startColumn": 5, + "endLine": 10500, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource108", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10599, + "startColumn": 5, + "endLine": 10599, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource109", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10698, + "startColumn": 5, + "endLine": 10698, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource11", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 996, + "startColumn": 5, + "endLine": 996, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource110", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10797, + "startColumn": 5, + "endLine": 10797, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource111", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10896, + "startColumn": 5, + "endLine": 10896, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource112", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10995, + "startColumn": 5, + "endLine": 10995, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource113", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11094, + "startColumn": 5, + "endLine": 11094, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource114", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11193, + "startColumn": 5, + "endLine": 11193, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource115", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11292, + "startColumn": 5, + "endLine": 11292, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource116", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11391, + "startColumn": 5, + "endLine": 11391, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource117", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11490, + "startColumn": 5, + "endLine": 11490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource118", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11589, + "startColumn": 5, + "endLine": 11589, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource119", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11688, + "startColumn": 5, + "endLine": 11688, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource12", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1095, + "startColumn": 5, + "endLine": 1095, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource120", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11787, + "startColumn": 5, + "endLine": 11787, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource121", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11886, + "startColumn": 5, + "endLine": 11886, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource122", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11985, + "startColumn": 5, + "endLine": 11985, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource123", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12084, + "startColumn": 5, + "endLine": 12084, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource124", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12183, + "startColumn": 5, + "endLine": 12183, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource125", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12282, + "startColumn": 5, + "endLine": 12282, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource126", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12381, + "startColumn": 5, + "endLine": 12381, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource127", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12480, + "startColumn": 5, + "endLine": 12480, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource128", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12579, + "startColumn": 5, + "endLine": 12579, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource129", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12678, + "startColumn": 5, + "endLine": 12678, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource13", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1194, + "startColumn": 5, + "endLine": 1194, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource130", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12777, + "startColumn": 5, + "endLine": 12777, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource131", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12876, + "startColumn": 5, + "endLine": 12876, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource132", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 12975, + "startColumn": 5, + "endLine": 12975, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource133", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13074, + "startColumn": 5, + "endLine": 13074, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource134", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13173, + "startColumn": 5, + "endLine": 13173, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource135", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13272, + "startColumn": 5, + "endLine": 13272, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource136", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13371, + "startColumn": 5, + "endLine": 13371, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource137", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13470, + "startColumn": 5, + "endLine": 13470, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource138", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13569, + "startColumn": 5, + "endLine": 13569, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource139", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13668, + "startColumn": 5, + "endLine": 13668, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource14", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1293, + "startColumn": 5, + "endLine": 1293, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource140", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13767, + "startColumn": 5, + "endLine": 13767, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource141", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13866, + "startColumn": 5, + "endLine": 13866, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource142", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13965, + "startColumn": 5, + "endLine": 13965, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource143", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14064, + "startColumn": 5, + "endLine": 14064, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource144", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14163, + "startColumn": 5, + "endLine": 14163, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource145", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14262, + "startColumn": 5, + "endLine": 14262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource146", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14361, + "startColumn": 5, + "endLine": 14361, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource147", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14460, + "startColumn": 5, + "endLine": 14460, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource148", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14559, + "startColumn": 5, + "endLine": 14559, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource149", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14658, + "startColumn": 5, + "endLine": 14658, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource15", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1392, + "startColumn": 5, + "endLine": 1392, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource150", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14757, + "startColumn": 5, + "endLine": 14757, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource151", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14856, + "startColumn": 5, + "endLine": 14856, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource152", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 14955, + "startColumn": 5, + "endLine": 14955, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource153", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15054, + "startColumn": 5, + "endLine": 15054, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource154", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15153, + "startColumn": 5, + "endLine": 15153, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource155", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15252, + "startColumn": 5, + "endLine": 15252, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource156", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15351, + "startColumn": 5, + "endLine": 15351, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource157", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15450, + "startColumn": 5, + "endLine": 15450, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource158", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15549, + "startColumn": 5, + "endLine": 15549, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource159", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15648, + "startColumn": 5, + "endLine": 15648, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource16", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1491, + "startColumn": 5, + "endLine": 1491, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource160", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15747, + "startColumn": 5, + "endLine": 15747, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource161", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15846, + "startColumn": 5, + "endLine": 15846, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource162", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15945, + "startColumn": 5, + "endLine": 15945, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource163", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16044, + "startColumn": 5, + "endLine": 16044, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource164", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16143, + "startColumn": 5, + "endLine": 16143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource165", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16242, + "startColumn": 5, + "endLine": 16242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource166", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16341, + "startColumn": 5, + "endLine": 16341, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource167", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16440, + "startColumn": 5, + "endLine": 16440, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource168", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16539, + "startColumn": 5, + "endLine": 16539, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource169", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16638, + "startColumn": 5, + "endLine": 16638, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource17", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1590, + "startColumn": 5, + "endLine": 1590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource170", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16737, + "startColumn": 5, + "endLine": 16737, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource171", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16836, + "startColumn": 5, + "endLine": 16836, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource172", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 16935, + "startColumn": 5, + "endLine": 16935, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource173", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17034, + "startColumn": 5, + "endLine": 17034, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource174", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17133, + "startColumn": 5, + "endLine": 17133, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource175", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17232, + "startColumn": 5, + "endLine": 17232, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource176", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17331, + "startColumn": 5, + "endLine": 17331, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource177", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17430, + "startColumn": 5, + "endLine": 17430, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource178", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17529, + "startColumn": 5, + "endLine": 17529, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource179", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17628, + "startColumn": 5, + "endLine": 17628, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource18", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1689, + "startColumn": 5, + "endLine": 1689, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource180", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17727, + "startColumn": 5, + "endLine": 17727, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource181", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17826, + "startColumn": 5, + "endLine": 17826, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource182", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 17925, + "startColumn": 5, + "endLine": 17925, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource183", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18024, + "startColumn": 5, + "endLine": 18024, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource184", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18123, + "startColumn": 5, + "endLine": 18123, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource185", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18222, + "startColumn": 5, + "endLine": 18222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource186", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18321, + "startColumn": 5, + "endLine": 18321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource187", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18420, + "startColumn": 5, + "endLine": 18420, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource188", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18519, + "startColumn": 5, + "endLine": 18519, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource189", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18618, + "startColumn": 5, + "endLine": 18618, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource19", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1788, + "startColumn": 5, + "endLine": 1788, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource190", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18717, + "startColumn": 5, + "endLine": 18717, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource191", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18816, + "startColumn": 5, + "endLine": 18816, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource192", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 18915, + "startColumn": 5, + "endLine": 18915, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource193", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19014, + "startColumn": 5, + "endLine": 19014, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource194", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19113, + "startColumn": 5, + "endLine": 19113, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource195", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19212, + "startColumn": 5, + "endLine": 19212, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource196", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19311, + "startColumn": 5, + "endLine": 19311, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource197", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19410, + "startColumn": 5, + "endLine": 19410, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource198", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19509, + "startColumn": 5, + "endLine": 19509, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource199", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19608, + "startColumn": 5, + "endLine": 19608, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 105, + "startColumn": 5, + "endLine": 105, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource20", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1887, + "startColumn": 5, + "endLine": 1887, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource200", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19707, + "startColumn": 5, + "endLine": 19707, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource201", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19806, + "startColumn": 5, + "endLine": 19806, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource202", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 19905, + "startColumn": 5, + "endLine": 19905, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource203", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20004, + "startColumn": 5, + "endLine": 20004, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource204", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20103, + "startColumn": 5, + "endLine": 20103, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource205", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20202, + "startColumn": 5, + "endLine": 20202, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource206", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20301, + "startColumn": 5, + "endLine": 20301, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource207", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20400, + "startColumn": 5, + "endLine": 20400, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource208", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20499, + "startColumn": 5, + "endLine": 20499, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource209", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20598, + "startColumn": 5, + "endLine": 20598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource21", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1986, + "startColumn": 5, + "endLine": 1986, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource210", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20697, + "startColumn": 5, + "endLine": 20697, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource211", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20796, + "startColumn": 5, + "endLine": 20796, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource212", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20895, + "startColumn": 5, + "endLine": 20895, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource213", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20994, + "startColumn": 5, + "endLine": 20994, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource214", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21093, + "startColumn": 5, + "endLine": 21093, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource215", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21192, + "startColumn": 5, + "endLine": 21192, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource216", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21291, + "startColumn": 5, + "endLine": 21291, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource217", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21390, + "startColumn": 5, + "endLine": 21390, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource218", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21489, + "startColumn": 5, + "endLine": 21489, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource219", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21588, + "startColumn": 5, + "endLine": 21588, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource22", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2085, + "startColumn": 5, + "endLine": 2085, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource220", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21687, + "startColumn": 5, + "endLine": 21687, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource221", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21786, + "startColumn": 5, + "endLine": 21786, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource222", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21885, + "startColumn": 5, + "endLine": 21885, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource223", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21984, + "startColumn": 5, + "endLine": 21984, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource224", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22083, + "startColumn": 5, + "endLine": 22083, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource225", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22182, + "startColumn": 5, + "endLine": 22182, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource226", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22281, + "startColumn": 5, + "endLine": 22281, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource227", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22380, + "startColumn": 5, + "endLine": 22380, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource228", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22479, + "startColumn": 5, + "endLine": 22479, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource229", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22578, + "startColumn": 5, + "endLine": 22578, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource23", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2184, + "startColumn": 5, + "endLine": 2184, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource230", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22677, + "startColumn": 5, + "endLine": 22677, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource231", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22776, + "startColumn": 5, + "endLine": 22776, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource232", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22875, + "startColumn": 5, + "endLine": 22875, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource233", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 22974, + "startColumn": 5, + "endLine": 22974, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource234", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23073, + "startColumn": 5, + "endLine": 23073, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource235", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23172, + "startColumn": 5, + "endLine": 23172, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource236", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23271, + "startColumn": 5, + "endLine": 23271, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource237", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23370, + "startColumn": 5, + "endLine": 23370, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource238", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23469, + "startColumn": 5, + "endLine": 23469, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource239", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23568, + "startColumn": 5, + "endLine": 23568, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource24", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2283, + "startColumn": 5, + "endLine": 2283, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource240", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23667, + "startColumn": 5, + "endLine": 23667, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource241", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23766, + "startColumn": 5, + "endLine": 23766, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource242", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23865, + "startColumn": 5, + "endLine": 23865, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource243", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23964, + "startColumn": 5, + "endLine": 23964, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource244", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24063, + "startColumn": 5, + "endLine": 24063, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource245", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24162, + "startColumn": 5, + "endLine": 24162, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource246", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24261, + "startColumn": 5, + "endLine": 24261, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource247", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24360, + "startColumn": 5, + "endLine": 24360, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource248", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24459, + "startColumn": 5, + "endLine": 24459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource249", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24558, + "startColumn": 5, + "endLine": 24558, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource25", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2382, + "startColumn": 5, + "endLine": 2382, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource250", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24657, + "startColumn": 5, + "endLine": 24657, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource251", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24756, + "startColumn": 5, + "endLine": 24756, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource252", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24855, + "startColumn": 5, + "endLine": 24855, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource253", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 24954, + "startColumn": 5, + "endLine": 24954, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource254", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25053, + "startColumn": 5, + "endLine": 25053, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource255", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25152, + "startColumn": 5, + "endLine": 25152, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource256", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25251, + "startColumn": 5, + "endLine": 25251, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource257", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25350, + "startColumn": 5, + "endLine": 25350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource258", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25449, + "startColumn": 5, + "endLine": 25449, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource259", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25548, + "startColumn": 5, + "endLine": 25548, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource26", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2481, + "startColumn": 5, + "endLine": 2481, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource260", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25647, + "startColumn": 5, + "endLine": 25647, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource261", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25746, + "startColumn": 5, + "endLine": 25746, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource262", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25845, + "startColumn": 5, + "endLine": 25845, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource263", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25944, + "startColumn": 5, + "endLine": 25944, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource264", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26043, + "startColumn": 5, + "endLine": 26043, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource265", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26142, + "startColumn": 5, + "endLine": 26142, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource266", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26241, + "startColumn": 5, + "endLine": 26241, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource267", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26340, + "startColumn": 5, + "endLine": 26340, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource268", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26439, + "startColumn": 5, + "endLine": 26439, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource269", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26538, + "startColumn": 5, + "endLine": 26538, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource27", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2580, + "startColumn": 5, + "endLine": 2580, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource270", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26637, + "startColumn": 5, + "endLine": 26637, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource271", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26736, + "startColumn": 5, + "endLine": 26736, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource272", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26835, + "startColumn": 5, + "endLine": 26835, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource273", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 26934, + "startColumn": 5, + "endLine": 26934, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource274", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27033, + "startColumn": 5, + "endLine": 27033, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource275", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27132, + "startColumn": 5, + "endLine": 27132, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource276", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27231, + "startColumn": 5, + "endLine": 27231, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource277", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27330, + "startColumn": 5, + "endLine": 27330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource278", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27429, + "startColumn": 5, + "endLine": 27429, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource279", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27528, + "startColumn": 5, + "endLine": 27528, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource28", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2679, + "startColumn": 5, + "endLine": 2679, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource280", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27627, + "startColumn": 5, + "endLine": 27627, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource281", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27726, + "startColumn": 5, + "endLine": 27726, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource282", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27825, + "startColumn": 5, + "endLine": 27825, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource283", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27924, + "startColumn": 5, + "endLine": 27924, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource284", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28023, + "startColumn": 5, + "endLine": 28023, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource285", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28122, + "startColumn": 5, + "endLine": 28122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource286", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28221, + "startColumn": 5, + "endLine": 28221, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource287", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28320, + "startColumn": 5, + "endLine": 28320, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource288", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28419, + "startColumn": 5, + "endLine": 28419, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource289", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28518, + "startColumn": 5, + "endLine": 28518, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource29", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2778, + "startColumn": 5, + "endLine": 2778, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource290", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28617, + "startColumn": 5, + "endLine": 28617, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource291", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28716, + "startColumn": 5, + "endLine": 28716, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource292", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28815, + "startColumn": 5, + "endLine": 28815, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource293", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 28914, + "startColumn": 5, + "endLine": 28914, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource294", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29013, + "startColumn": 5, + "endLine": 29013, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource295", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29112, + "startColumn": 5, + "endLine": 29112, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource296", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29211, + "startColumn": 5, + "endLine": 29211, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource297", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29310, + "startColumn": 5, + "endLine": 29310, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource298", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29409, + "startColumn": 5, + "endLine": 29409, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource299", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29508, + "startColumn": 5, + "endLine": 29508, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 204, + "startColumn": 5, + "endLine": 204, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource30", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2877, + "startColumn": 5, + "endLine": 2877, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource31", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2976, + "startColumn": 5, + "endLine": 2976, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource32", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3075, + "startColumn": 5, + "endLine": 3075, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource33", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3174, + "startColumn": 5, + "endLine": 3174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource34", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3273, + "startColumn": 5, + "endLine": 3273, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource35", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3372, + "startColumn": 5, + "endLine": 3372, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource36", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3471, + "startColumn": 5, + "endLine": 3471, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource37", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3570, + "startColumn": 5, + "endLine": 3570, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource38", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3669, + "startColumn": 5, + "endLine": 3669, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource39", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3768, + "startColumn": 5, + "endLine": 3768, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource4", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 303, + "startColumn": 5, + "endLine": 303, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource40", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3867, + "startColumn": 5, + "endLine": 3867, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource41", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 3966, + "startColumn": 5, + "endLine": 3966, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource42", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4065, + "startColumn": 5, + "endLine": 4065, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource43", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4164, + "startColumn": 5, + "endLine": 4164, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource44", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4263, + "startColumn": 5, + "endLine": 4263, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource45", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4362, + "startColumn": 5, + "endLine": 4362, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource46", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4461, + "startColumn": 5, + "endLine": 4461, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource47", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4560, + "startColumn": 5, + "endLine": 4560, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource48", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4659, + "startColumn": 5, + "endLine": 4659, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource49", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4758, + "startColumn": 5, + "endLine": 4758, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource5", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 402, + "startColumn": 5, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource50", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4857, + "startColumn": 5, + "endLine": 4857, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource51", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4956, + "startColumn": 5, + "endLine": 4956, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource52", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5055, + "startColumn": 5, + "endLine": 5055, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource53", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5154, + "startColumn": 5, + "endLine": 5154, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource54", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5253, + "startColumn": 5, + "endLine": 5253, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource55", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5352, + "startColumn": 5, + "endLine": 5352, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource56", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5451, + "startColumn": 5, + "endLine": 5451, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource57", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5550, + "startColumn": 5, + "endLine": 5550, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource58", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5649, + "startColumn": 5, + "endLine": 5649, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource59", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5748, + "startColumn": 5, + "endLine": 5748, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource6", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 501, + "startColumn": 5, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource60", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5847, + "startColumn": 5, + "endLine": 5847, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource61", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 5946, + "startColumn": 5, + "endLine": 5946, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource62", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6045, + "startColumn": 5, + "endLine": 6045, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource63", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6144, + "startColumn": 5, + "endLine": 6144, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource64", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6243, + "startColumn": 5, + "endLine": 6243, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource65", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6342, + "startColumn": 5, + "endLine": 6342, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource66", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6441, + "startColumn": 5, + "endLine": 6441, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource67", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6540, + "startColumn": 5, + "endLine": 6540, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource68", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6639, + "startColumn": 5, + "endLine": 6639, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource69", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6738, + "startColumn": 5, + "endLine": 6738, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource7", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 600, + "startColumn": 5, + "endLine": 600, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource70", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6837, + "startColumn": 5, + "endLine": 6837, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource71", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 6936, + "startColumn": 5, + "endLine": 6936, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource72", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7035, + "startColumn": 5, + "endLine": 7035, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource73", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7134, + "startColumn": 5, + "endLine": 7134, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource74", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7233, + "startColumn": 5, + "endLine": 7233, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource75", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7332, + "startColumn": 5, + "endLine": 7332, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource76", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7431, + "startColumn": 5, + "endLine": 7431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource77", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7530, + "startColumn": 5, + "endLine": 7530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource78", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7629, + "startColumn": 5, + "endLine": 7629, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource79", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7728, + "startColumn": 5, + "endLine": 7728, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource8", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 699, + "startColumn": 5, + "endLine": 699, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource80", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7827, + "startColumn": 5, + "endLine": 7827, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource81", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7926, + "startColumn": 5, + "endLine": 7926, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource82", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8025, + "startColumn": 5, + "endLine": 8025, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource83", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8124, + "startColumn": 5, + "endLine": 8124, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource84", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8223, + "startColumn": 5, + "endLine": 8223, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource85", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8322, + "startColumn": 5, + "endLine": 8322, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource86", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8421, + "startColumn": 5, + "endLine": 8421, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource87", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8520, + "startColumn": 5, + "endLine": 8520, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource88", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8619, + "startColumn": 5, + "endLine": 8619, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource89", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8718, + "startColumn": 5, + "endLine": 8718, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource9", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 798, + "startColumn": 5, + "endLine": 798, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource90", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8817, + "startColumn": 5, + "endLine": 8817, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource91", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 8916, + "startColumn": 5, + "endLine": 8916, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource92", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9015, + "startColumn": 5, + "endLine": 9015, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource93", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9114, + "startColumn": 5, + "endLine": 9114, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource94", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9213, + "startColumn": 5, + "endLine": 9213, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource95", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9312, + "startColumn": 5, + "endLine": 9312, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource96", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9411, + "startColumn": 5, + "endLine": 9411, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource97", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9510, + "startColumn": 5, + "endLine": 9510, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource98", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9609, + "startColumn": 5, + "endLine": 9609, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource99", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 9708, + "startColumn": 5, + "endLine": 9708, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -80530,7 +96459,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80569,6 +96498,25 @@ "endColumn": 11, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -80581,7 +96529,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -80630,6 +96578,45 @@ "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): mySubnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -80705,7 +96692,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80732,6 +96719,45 @@ "endColumn": 11, "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Mod: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Mod", + "entityType": "Resource", + "resourceType": "MyCompany::Testing::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -80744,7 +96770,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80771,6 +96797,45 @@ "endColumn": 19, "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -80783,7 +96848,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80810,6 +96875,45 @@ "endColumn": 11, "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): IamRoleModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamRoleModule", + "entityType": "Resource", + "resourceType": "Some::IAM::Role::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -80822,7 +96926,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80849,6 +96953,45 @@ "endColumn": 17, "ruleDescription": "Check that Modules resources are valid", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -80861,7 +97004,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -80869,7 +97012,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "My::Organization::Custom::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "bad/noecho.yaml": { "filePath": "bad/noecho.yaml", @@ -80880,7 +97063,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -80929,6 +97112,60 @@ "ruleDescription": "NoEcho parameters are not masked when used in Metadata and Outputs", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): SNSTopicWithSecretNameInRef: No Metadata.com.aws.cloudformation.Context block found.; SNSTopicWithSecretNameInSub: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SNSTopicWithSecretNameInRef", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 5, + "endLine": 12, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SNSTopicWithSecretNameInSub", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 18, + "startColumn": 5, + "endLine": 18, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -80980,7 +97217,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -81006,6 +97243,21 @@ "category": "Structure", "ruleDescription": "Top-level keys must be valid section names", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -81018,7 +97270,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 7, "debug": 0 }, @@ -81046,6 +97298,60 @@ "ruleDescription": "Validate OpenSearch domain cluster instance type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): BadDomain: No Metadata.com.aws.cloudformation.Context block found.; ValidDomain: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BadDomain", + "entityType": "Resource", + "resourceType": "AWS::OpenSearchService::Domain" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "ValidDomain", + "resourceType": "AWS::OpenSearchService::Domain" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -81178,7 +97484,7 @@ "counts": { "fatal": 7, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -81313,6 +97619,45 @@ "ruleDescription": "Output value must be a string", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -81399,7 +97744,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -81474,6 +97819,99 @@ "actualValue": "Private" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): VPC: No Metadata.com.aws.cloudformation.Context block found.; myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.; mySpotFleet: No Metadata.com.aws.cloudformation.Context block found.; untaggedInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "myS3Bucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySpotFleet", + "resourceType": "AWS::EC2::SpotFleet" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "untaggedInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -81630,7 +98068,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -81639,6 +98077,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): myGameLift: No Metadata.com.aws.cloudformation.Context block found.; myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myGameLift", + "entityType": "Resource", + "resourceType": "AWS::GameLift::Alias" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "myS3Bucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -81710,7 +98215,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -81757,6 +98262,86 @@ "ruleDescription": "Check resources with UpdateReplacePolicy/DeletionPolicy have both", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.; myS3BucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.; myVpc1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "myS3BucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc1", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -81895,7 +98480,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -81927,6 +98512,45 @@ "actualValue": "Private" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -81958,7 +98582,7 @@ "counts": { "fatal": 5, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 1, "debug": 0 }, @@ -82147,6 +98771,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 1, + "endLine": 23, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -82178,7 +98841,7 @@ "counts": { "fatal": 4, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -82276,6 +98939,45 @@ "endColumn": 7, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -82288,7 +98990,7 @@ "counts": { "fatal": 1, "errors": 14, - "warnings": 16, + "warnings": 18, "informational": 3, "debug": 0 }, @@ -82855,6 +99557,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 58, + "startColumn": 1, + "endLine": 58, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): IamPipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamPipeline", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -82922,7 +99663,7 @@ "counts": { "fatal": 10, "errors": 3, - "warnings": 9, + "warnings": 10, "informational": 0, "debug": 0 }, @@ -83321,6 +100062,25 @@ "endColumn": 29, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 61, + "startColumn": 1, + "endLine": 61, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -83333,7 +100093,7 @@ "counts": { "fatal": 2, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -83445,6 +100205,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Pipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -83499,7 +100298,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 5, "debug": 0 }, @@ -83527,6 +100326,45 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3100", "severity": "INFO", @@ -83633,7 +100471,7 @@ "counts": { "fatal": 1, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 23, "debug": 0 }, @@ -83705,6 +100543,112 @@ "ruleDescription": "Validate ElastiCache cluster cache node type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): CacheCluster: No Metadata.com.aws.cloudformation.Context block found.; DBInstance: No Metadata.com.aws.cloudformation.Context block found.; Domain: No Metadata.com.aws.cloudformation.Context block found.; Domain2: No Metadata.com.aws.cloudformation.Context block found.; Host: No Metadata.com.aws.cloudformation.Context block found.; Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CacheCluster", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::CacheCluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "DBInstance", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain", + "resourceType": "AWS::Elasticsearch::Domain" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain2", + "resourceType": "AWS::Elasticsearch::Domain" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Host", + "resourceType": "AWS::EC2::Host" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -84160,7 +101104,7 @@ "counts": { "fatal": 1, "errors": 3, - "warnings": 6, + "warnings": 8, "informational": 14, "debug": 0 }, @@ -84368,6 +101312,73 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyEC2Instance: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance3: No Metadata.com.aws.cloudformation.Context block found.; MyLaunchConfig: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyEC2Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "MyEC2Instance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3100", "severity": "INFO", @@ -84678,7 +101689,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 13, + "warnings": 15, "informational": 19, "debug": 0 }, @@ -84930,6 +101941,73 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 1, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyDB: No Metadata.com.aws.cloudformation.Context block found.; MyNewDB: No Metadata.com.aws.cloudformation.Context block found.; myThirdDb: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "MyNewDB", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myThirdDb", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -85319,7 +102397,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 13, "debug": 0 }, @@ -85364,6 +102442,125 @@ "ruleDescription": "Condition referenced by resource is not defined", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 1, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): AuxiliaryPublicSubnetRouteTableAssociation1: No Metadata.com.aws.cloudformation.Context block found.; AuxilliaryCustomSubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; CustomResource: No Metadata.com.aws.cloudformation.Context block found.; CustomSubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnetRouteTableAssociation1: No Metadata.com.aws.cloudformation.Context block found.; ProxySubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnetRouteTableAssociation1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuxiliaryPublicSubnetRouteTableAssociation1", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 46, + "relatedResources": [ + { + "resource": { + "id": "AuxilliaryCustomSubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 68, + "startColumn": 3, + "endLine": 68, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomResource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "location": { + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomSubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnetRouteTableAssociation1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxySubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnetRouteTableAssociation1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -85721,7 +102918,7 @@ "counts": { "fatal": 3, "errors": 13, - "warnings": 7, + "warnings": 9, "informational": 21, "debug": 0 }, @@ -86188,6 +103385,151 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 1, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): SecurityGroupRuleSSM: No Metadata.com.aws.cloudformation.Context block found.; myInstance: No Metadata.com.aws.cloudformation.Context block found.; myLaunchTemplate: No Metadata.com.aws.cloudformation.Context block found.; myLaunchTemplate2: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupIngress: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupIngress2: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupIngressExclusive: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupNonVpc: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SecurityGroupRuleSSM", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 23, + "relatedResources": [ + { + "resource": { + "id": "myInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myLaunchTemplate", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myLaunchTemplate2", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupIngress", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupIngress2", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupIngressExclusive", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupNonVpc", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -86678,7 +104020,7 @@ "counts": { "fatal": 3, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -86788,6 +104130,45 @@ "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -86929,7 +104310,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 6, "debug": 0 }, @@ -86977,6 +104358,45 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Db: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Db", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -87095,7 +104515,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 8, "debug": 0 }, @@ -87146,6 +104566,45 @@ "actualValue": true } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Database: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Database", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -87310,7 +104769,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 13, "debug": 0 }, @@ -87319,6 +104778,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): IGW: No Metadata.com.aws.cloudformation.Context block found.; RedshiftSubnetGroup: No Metadata.com.aws.cloudformation.Context block found.; Route1: No Metadata.com.aws.cloudformation.Context block found.; RouteTable1: No Metadata.com.aws.cloudformation.Context block found.; Subnet1: No Metadata.com.aws.cloudformation.Context block found.; SubnetRTAssoc: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::InternetGateway" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "RedshiftSubnetGroup", + "resourceType": "AWS::Redshift::ClusterSubnetGroup" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Route1", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RouteTable1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetRTAssoc", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -87622,7 +105200,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 17, "debug": 0 }, @@ -87735,6 +105313,60 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): AnotherInstance: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AnotherInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "MyEC2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3100", "severity": "INFO", @@ -88113,7 +105745,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -88142,6 +105774,45 @@ "ruleDescription": "Validate resource based IAM policies", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Policy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Policy", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -88209,7 +105880,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -88217,7 +105888,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): BackupPlan: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BackupPlan", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupPlan" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "bad/resources/cloudformation/stack_nested.yaml": { "filePath": "bad/resources/cloudformation/stack_nested.yaml", @@ -88228,7 +105939,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 2, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -88285,6 +105996,25 @@ "endColumn": 6, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -88297,7 +106027,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -88344,6 +106074,60 @@ "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Stack3: No Metadata.com.aws.cloudformation.Context block found.; StackNormal: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Stack3", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "StackNormal", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -88467,7 +106251,7 @@ "counts": { "fatal": 2, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -88563,6 +106347,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TestPipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TestPipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -88617,7 +106440,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -88646,6 +106469,45 @@ "ruleDescription": "AttributeDefinitions / KeySchemas mismatch", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): dynamoDBTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -88735,7 +106597,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -88744,6 +106606,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): dynamoDBTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -88833,7 +106734,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -88842,6 +106743,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): dynamoDBTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "dynamoDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -88931,7 +106871,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 30, "debug": 0 }, @@ -88940,6 +106880,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): BasicReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; FourtReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; MyClusterParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; MyNonClusterParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; MyParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; SecondReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; ThirdReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BasicReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 24, + "relatedResources": [ + { + "resource": { + "id": "FourtReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 89, + "startColumn": 3, + "endLine": 89, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyClusterParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyNonClusterParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecondReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ThirdReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -89565,7 +107624,7 @@ "counts": { "fatal": 4, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -89725,6 +107784,86 @@ "ruleDescription": "IAM policy with NotAction", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): rIamPolicy: No Metadata.com.aws.cloudformation.Context block found.; rIamPolicyExtraThings: No Metadata.com.aws.cloudformation.Context block found.; rIamRole: No Metadata.com.aws.cloudformation.Context block found.; rIamUser: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rIamPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "rIamPolicyExtraThings", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIamRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIamUser", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -89779,7 +107918,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -89788,6 +107927,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SomeManagedPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SomeManagedPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -89822,7 +108000,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 11, "debug": 0 }, @@ -89851,6 +108029,99 @@ "ruleDescription": "Check if REFing to a IAM resource with path set", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): CodeBuildProject: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildRole: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildSubnet: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildVPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CodeBuildProject", + "entityType": "Resource", + "resourceType": "AWS::CodeBuild::Project" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "CodeBuildRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildSubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildVPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -90099,7 +108370,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -90108,6 +108379,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): ecr1: No Metadata.com.aws.cloudformation.Context block found.; ecr2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ecr1", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "ecr2", + "resourceType": "AWS::ECR::Repository" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -90159,7 +108484,7 @@ "counts": { "fatal": 6, "errors": 5, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -90409,6 +108734,73 @@ "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): myLambdaFunction: No Metadata.com.aws.cloudformation.Context block found.; myLambdaFunction2: No Metadata.com.aws.cloudformation.Context block found.; myLambdaFunction3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myLambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "myLambdaFunction2", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myLambdaFunction3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -90546,7 +108938,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 7, + "warnings": 9, "informational": 4, "debug": 0 }, @@ -90712,6 +109104,73 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Function1: No Metadata.com.aws.cloudformation.Context block found.; Function2: No Metadata.com.aws.cloudformation.Context block found.; Function3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "Function2", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Function3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -90805,7 +109264,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -90852,6 +109311,60 @@ "ruleDescription": "Logical IDs must be alphanumeric", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): my.Instance: No Metadata.com.aws.cloudformation.Context block found.; my_Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "my.Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "my_Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -90903,7 +109416,7 @@ "counts": { "fatal": 0, "errors": 10, - "warnings": 0, + "warnings": 2, "informational": 25, "debug": 0 }, @@ -91102,6 +109615,203 @@ "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): BadType: No Metadata.com.aws.cloudformation.Context block found.; Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.; Module1: No Metadata.com.aws.cloudformation.Context block found.; Module2: No Metadata.com.aws.cloudformation.Context block found.; Project1: No Metadata.com.aws.cloudformation.Context block found.; Project2: No Metadata.com.aws.cloudformation.Context block found.; RootRole: No Metadata.com.aws.cloudformation.Context block found.; RootRole2: No Metadata.com.aws.cloudformation.Context block found.; RootRole3: No Metadata.com.aws.cloudformation.Context block found.; RootRole4: No Metadata.com.aws.cloudformation.Context block found.; RootRole5: No Metadata.com.aws.cloudformation.Context block found.; RootRole6: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BadType", + "entityType": "Resource", + "resourceType": "" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 155, + "startColumn": 3, + "endLine": 155, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Bucket1", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 147, + "startColumn": 3, + "endLine": 147, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Module1", + "resourceType": "MyCompany::MODULE" + }, + "location": { + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Module2", + "resourceType": "MyCompany::MODULE" + }, + "location": { + "startLine": 161, + "startColumn": 3, + "endLine": 161, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Project1", + "resourceType": "AWS::CodeBuild::Project" + }, + "location": { + "startLine": 165, + "startColumn": 3, + "endLine": 165, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Project2", + "resourceType": "AWS::CodeBuild::Project" + }, + "location": { + "startLine": 185, + "startColumn": 3, + "endLine": 185, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole6", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -91658,7 +110368,7 @@ "counts": { "fatal": 2, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -91749,6 +110459,60 @@ "endColumn": 15, "ruleDescription": "Validate identity based IAM policies", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): myPolicy: No Metadata.com.aws.cloudformation.Context block found.; myPolicy2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "myPolicy2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -91761,7 +110525,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -91769,7 +110533,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CustomResource4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResource4", + "entityType": "Resource", + "resourceType": "Custom::SpecifiedCustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 18, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "bad/resources/properties/list_duplicates.yaml": { "filePath": "bad/resources/properties/list_duplicates.yaml", @@ -91780,7 +110584,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -91817,6 +110621,73 @@ "arn:aws:iam::aws:policy/AdministratorPolicy" ] } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): IamGroup: No Metadata.com.aws.cloudformation.Context block found.; IamGroupWithConditions: No Metadata.com.aws.cloudformation.Context block found.; IamGroupWithNestedConditions: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamGroup", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "IamGroupWithConditions", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamGroupWithNestedConditions", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -91829,7 +110700,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 2, "debug": 0 }, @@ -91920,6 +110791,60 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): ExampleLambda: No Metadata.com.aws.cloudformation.Context block found.; ExampleLambda1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ExampleLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "ExampleLambda1", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -91971,7 +110896,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -92049,6 +110974,73 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): CloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; myRepository: No Metadata.com.aws.cloudformation.Context block found.; myRepository2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudWatchAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "myRepository", + "resourceType": "AWS::CodeCommit::Repository" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myRepository2", + "resourceType": "AWS::CodeCommit::Repository" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -92120,7 +111112,7 @@ "counts": { "fatal": 2, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -92217,6 +111209,45 @@ "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SampleLambda: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SampleLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -92248,7 +111279,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 6, + "warnings": 8, "informational": 39, "debug": 0 }, @@ -92454,6 +111485,138 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): DBInstance1: No Metadata.com.aws.cloudformation.Context block found.; DBInstance2: No Metadata.com.aws.cloudformation.Context block found.; DBInstance3: No Metadata.com.aws.cloudformation.Context block found.; DBInstance4: No Metadata.com.aws.cloudformation.Context block found.; DBInstance5: No Metadata.com.aws.cloudformation.Context block found.; DBInstance7: No Metadata.com.aws.cloudformation.Context block found.; DBInstance8: No Metadata.com.aws.cloudformation.Context block found.; DBInstance9: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance1", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "DBInstance2", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance3", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance4", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance5", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance7", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance8", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance9", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -93221,7 +112384,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -93276,6 +112439,60 @@ "actualValue": "BucketOwnerFullControl" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -93327,7 +112544,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -93363,6 +112580,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -93417,7 +112673,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -93463,6 +112719,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Name: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Name", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -93494,7 +112789,7 @@ "counts": { "fatal": 6, "errors": 6, - "warnings": 9, + "warnings": 11, "informational": 38, "debug": 0 }, @@ -93914,6 +113209,177 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 22, + "startColumn": 1, + "endLine": 22, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): myBucket: No Metadata.com.aws.cloudformation.Context block found.; myBucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; myInstance: No Metadata.com.aws.cloudformation.Context block found.; myInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; myInstanceSub: No Metadata.com.aws.cloudformation.Context block found.; myKms: No Metadata.com.aws.cloudformation.Context block found.; myRoleToWriteToS3: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc1: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc2: No Metadata.com.aws.cloudformation.Context block found.; mySecurityGroupVpc3: No Metadata.com.aws.cloudformation.Context block found.; taskdefinition: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "myBucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstanceSub", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 213, + "startColumn": 3, + "endLine": 213, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myKms", + "resourceType": "AWS::KMS::Key" + }, + "location": { + "startLine": 153, + "startColumn": 3, + "endLine": 153, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myRoleToWriteToS3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc1", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc2", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySecurityGroupVpc3", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "taskdefinition", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 220, + "startColumn": 3, + "endLine": 220, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -94720,7 +114186,7 @@ "counts": { "fatal": 9, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -94900,6 +114366,151 @@ "ruleDescription": "Circular dependency detected", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): Resource: No Metadata.com.aws.cloudformation.Context block found.; Resource2: No Metadata.com.aws.cloudformation.Context block found.; Resource3: No Metadata.com.aws.cloudformation.Context block found.; Resource4: No Metadata.com.aws.cloudformation.Context block found.; Resource5: No Metadata.com.aws.cloudformation.Context block found.; Resource6: No Metadata.com.aws.cloudformation.Context block found.; Resource7: No Metadata.com.aws.cloudformation.Context block found.; Resource8: No Metadata.com.aws.cloudformation.Context block found.; Resource9: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Resource", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "Resource2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource3", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource5", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource6", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource7", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource8", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Resource9", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -95091,7 +114702,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -95138,6 +114749,60 @@ "ruleDescription": "Circular dependency detected", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Resource: No Metadata.com.aws.cloudformation.Context block found.; Resource2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Resource", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "Resource2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -95189,7 +114854,7 @@ "counts": { "fatal": 0, "errors": 8, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -95350,6 +115015,45 @@ "ruleDescription": "CloudFront Aliases", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CloudFrontDistribution: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 25, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -95381,7 +115085,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -95423,6 +115127,45 @@ "expectedConstraint": "object" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyCognitoUserPool: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyCognitoUserPool", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPool" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -95470,7 +115213,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 8, + "warnings": 10, "informational": 17, "debug": 0 }, @@ -95667,6 +115410,99 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): InvalidMapping: No Metadata.com.aws.cloudformation.Context block found.; MadeUpPolicy: No Metadata.com.aws.cloudformation.Context block found.; MyIAMUser: No Metadata.com.aws.cloudformation.Context block found.; PolicyList: No Metadata.com.aws.cloudformation.Context block found.; UnsupportedIntrinsic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "MadeUpPolicy", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyIAMUser", + "resourceType": "AWS::IAM::User" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PolicyList", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnsupportedIntrinsic", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -96012,7 +115848,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -96046,6 +115882,45 @@ "min_items": 1 } } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): IamUser: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamUser", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -96058,7 +115933,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 9, + "warnings": 11, "informational": 18, "debug": 0 }, @@ -96273,6 +116148,99 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): InvalidMapping: No Metadata.com.aws.cloudformation.Context block found.; MadeUpPolicy: No Metadata.com.aws.cloudformation.Context block found.; MyIAMUser: No Metadata.com.aws.cloudformation.Context block found.; PolicyList: No Metadata.com.aws.cloudformation.Context block found.; UnsupportedIntrinsic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMapping", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "MadeUpPolicy", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyIAMUser", + "resourceType": "AWS::IAM::User" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PolicyList", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnsupportedIntrinsic", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -96636,7 +116604,7 @@ "counts": { "fatal": 0, "errors": 30, - "warnings": 1, + "warnings": 3, "informational": 20, "debug": 0 }, @@ -97235,6 +117203,177 @@ "ruleDescription": "String value matches a pseudo parameter; use Ref instead", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 1, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): MyAAAARecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyARecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyAliasRecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyCAARecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyCNAMERecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyCNAMERecordSetConditions: No Metadata.com.aws.cloudformation.Context block found.; MyHostedZone: No Metadata.com.aws.cloudformation.Context block found.; MyMXRecordSet: No Metadata.com.aws.cloudformation.Context block found.; MyRecordSetGroup: No Metadata.com.aws.cloudformation.Context block found.; MyTXTRecordSet: No Metadata.com.aws.cloudformation.Context block found.; PoorlyConfiguredRoute53: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyAAAARecordSet", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "MyARecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyAliasRecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyCAARecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyCNAMERecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyCNAMERecordSetConditions", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyHostedZone", + "resourceType": "AWS::Route53::HostedZone" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyMXRecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyRecordSetGroup", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTXTRecordSet", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PoorlyConfiguredRoute53", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 171, + "startColumn": 3, + "endLine": 171, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -97694,7 +117833,7 @@ "counts": { "fatal": 0, "errors": 10, - "warnings": 0, + "warnings": 2, "informational": 15, "debug": 0 }, @@ -97893,6 +118032,164 @@ "ruleDescription": "Validate Route53 RecordSets", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): GroupInvalidFalse: No Metadata.com.aws.cloudformation.Context block found.; GroupInvalidTrue: No Metadata.com.aws.cloudformation.Context block found.; GroupMixedInvalidFalse: No Metadata.com.aws.cloudformation.Context block found.; GroupMixedInvalidTrue: No Metadata.com.aws.cloudformation.Context block found.; GroupUnresolvedCnameCardinality: No Metadata.com.aws.cloudformation.Context block found.; StandaloneInvalidFalse: No Metadata.com.aws.cloudformation.Context block found.; StandaloneInvalidTrue: No Metadata.com.aws.cloudformation.Context block found.; StandaloneMixedInvalidFalse: No Metadata.com.aws.cloudformation.Context block found.; StandaloneMixedInvalidTrue: No Metadata.com.aws.cloudformation.Context block found.; StandaloneUnresolvedCnameCardinality: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GroupInvalidFalse", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "GroupInvalidTrue", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 58, + "startColumn": 3, + "endLine": 58, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GroupMixedInvalidFalse", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 102, + "startColumn": 3, + "endLine": 102, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GroupMixedInvalidTrue", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GroupUnresolvedCnameCardinality", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 128, + "startColumn": 3, + "endLine": 128, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneInvalidFalse", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneInvalidTrue", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneMixedInvalidFalse", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneMixedInvalidTrue", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneUnresolvedCnameCardinality", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -98234,7 +118531,7 @@ "counts": { "fatal": 0, "errors": 8, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -98395,6 +118692,125 @@ "ruleDescription": "Validate Route53 record set aliases", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): AliasConflictFirst: No Metadata.com.aws.cloudformation.Context block found.; AliasConflictSecond: No Metadata.com.aws.cloudformation.Context block found.; ConditionalInvalidAliasTypes: No Metadata.com.aws.cloudformation.Context block found.; ConditionalRecordSetsInvalidFirst: No Metadata.com.aws.cloudformation.Context block found.; ConditionalRecordSetsInvalidSecond: No Metadata.com.aws.cloudformation.Context block found.; WholePropertiesRecordsInvalidFirst: No Metadata.com.aws.cloudformation.Context block found.; WholePropertiesRecordsInvalidSecond: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AliasConflictFirst", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "AliasConflictSecond", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalInvalidAliasTypes", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalRecordSetsInvalidFirst", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalRecordSetsInvalidSecond", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WholePropertiesRecordsInvalidFirst", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 79, + "startColumn": 3, + "endLine": 79, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WholePropertiesRecordsInvalidSecond", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 95, + "startColumn": 3, + "endLine": 95, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -98494,7 +118910,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -98523,6 +118939,45 @@ "ruleDescription": "Validate the days for tierings in IntelligentTieringConfigurations", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -98554,7 +119009,7 @@ "counts": { "fatal": 36, "errors": 5, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -99383,6 +119838,99 @@ "ruleDescription": "Validate SageMaker cluster instance types based on region", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.; InferenceExperiment: No Metadata.com.aws.cloudformation.Context block found.; ModelPackage: No Metadata.com.aws.cloudformation.Context block found.; ModelQualityJobDefinition: No Metadata.com.aws.cloudformation.Context block found.; MonitoringSchedule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::SageMaker::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "InferenceExperiment", + "resourceType": "AWS::SageMaker::InferenceExperiment" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ModelPackage", + "resourceType": "AWS::SageMaker::ModelPackage" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ModelQualityJobDefinition", + "resourceType": "AWS::SageMaker::ModelQualityJobDefinition" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MonitoringSchedule", + "resourceType": "AWS::SageMaker::MonitoringSchedule" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -100581,7 +121129,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -100608,6 +121156,45 @@ "ruleDescription": "Check if Serverless Resources have Serverless Transform", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -100639,7 +121226,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -100666,6 +121253,45 @@ "ruleDescription": "Check if Serverless Resources have Serverless Transform", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -100697,7 +121323,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -100818,6 +121444,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -100871,7 +121536,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -100919,6 +121584,60 @@ "ruleDescription": "Value not valid under oneOf", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): NoAZ: No Metadata.com.aws.cloudformation.Context block found.; NoImage: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NoAZ", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "NoImage", + "resourceType": "AWS::AppStream::ImageBuilder" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -101028,7 +121747,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -101062,6 +121781,45 @@ "resolutionSource": "Fn::If on condition 'IsProd'" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -101116,7 +121874,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -101202,6 +121960,45 @@ "actualValue": "InvalidAccessControl" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -101255,7 +122052,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -101306,6 +122103,45 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -101406,7 +122242,7 @@ "counts": { "fatal": 1, "errors": 3, - "warnings": 5, + "warnings": 7, "informational": 8, "debug": 0 }, @@ -101590,6 +122426,99 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): DeprecatedLambda: No Metadata.com.aws.cloudformation.Context block found.; EolLambda: No Metadata.com.aws.cloudformation.Context block found.; MaintenanceResource: No Metadata.com.aws.cloudformation.Context block found.; ShutdownResource: No Metadata.com.aws.cloudformation.Context block found.; SunsetResource: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DeprecatedLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "EolLambda", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MaintenanceResource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ShutdownResource", + "resourceType": "AWS::CodeStar::GitHubRepository" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SunsetResource", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -101773,7 +122702,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -101809,6 +122738,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -101918,7 +122886,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 8, "debug": 0 }, @@ -102010,6 +122978,73 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DeprecatedProp: No Metadata.com.aws.cloudformation.Context block found.; PatternBucket: No Metadata.com.aws.cloudformation.Context block found.; ReadOnlyProp: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DeprecatedProp", + "entityType": "Resource", + "resourceType": "AWS::Athena::WorkGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "PatternBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ReadOnlyProp", + "resourceType": "AWS::ACMPCA::Certificate" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -102198,7 +123233,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -102225,6 +123260,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Lambda: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Lambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -102278,7 +123352,7 @@ "counts": { "fatal": 6, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 10, "debug": 0 }, @@ -102414,6 +123488,86 @@ "ruleDescription": "One of properties required (requiredOr)", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): AlarmBothStats: No Metadata.com.aws.cloudformation.Context block found.; ScalingPolicyBothIds: No Metadata.com.aws.cloudformation.Context block found.; ScalingPolicyMissingDeps: No Metadata.com.aws.cloudformation.Context block found.; SubnetNoCidr: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AlarmBothStats", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "ScalingPolicyBothIds", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ScalingPolicyMissingDeps", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetNoCidr", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -102648,7 +123802,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 2, "debug": 0 }, @@ -102723,6 +123877,45 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -102776,7 +123969,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -102835,6 +124028,45 @@ "arn:aws:iam::012345678901:role/SameRole" ] } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Profile: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Profile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -102847,7 +124079,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 1, "debug": 0 }, @@ -102916,6 +124148,45 @@ "lifecycle": "write-only" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CertAuth: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CertAuth", + "entityType": "Resource", + "resourceType": "AWS::ACMPCA::CertificateAuthorityActivation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -102950,7 +124221,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -102999,6 +124270,60 @@ "ruleDescription": "Security group allows open access to sensitive port", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): OpenSSH: No Metadata.com.aws.cloudformation.Context block found.; WildcardPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSSH", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "WildcardPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -103052,7 +124377,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -103091,6 +124416,45 @@ ] } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SG: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -103144,7 +124508,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -103173,6 +124537,45 @@ "ruleDescription": "Dependent property required", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): OpenSG: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "OpenSG", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -103226,7 +124629,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -103235,6 +124638,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -103289,7 +124731,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -103298,6 +124740,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Topic: No Metadata.com.aws.cloudformation.Context block found.; TopicPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "TopicPolicy", + "resourceType": "AWS::SNS::TopicPolicy" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -103352,7 +124848,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 0, + "warnings": 2, "informational": 20, "debug": 0 }, @@ -103453,6 +124949,138 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): FunctionA: No Metadata.com.aws.cloudformation.Context block found.; FunctionALogGroup: No Metadata.com.aws.cloudformation.Context block found.; FunctionB: No Metadata.com.aws.cloudformation.Context block found.; FunctionBLogGroup: No Metadata.com.aws.cloudformation.Context block found.; FunctionC: No Metadata.com.aws.cloudformation.Context block found.; FunctionCLogGroup: No Metadata.com.aws.cloudformation.Context block found.; LogSubscriptionFunction: No Metadata.com.aws.cloudformation.Context block found.; LogSubscriptionFunctionLogGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionA", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "FunctionALogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionB", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionBLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionC", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionCLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogSubscriptionFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogSubscriptionFunctionLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -103864,7 +125492,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -103917,6 +125545,45 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): FifoQueue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -104049,7 +125716,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 11, "debug": 0 }, @@ -104077,6 +125744,60 @@ "ruleDescription": "Validate SQS DLQ queues are the same type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): DLQ: No Metadata.com.aws.cloudformation.Context block found.; MainQueue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DLQ", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "MainQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -104307,7 +126028,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -104335,6 +126056,45 @@ "ruleDescription": "Validate the structure of a SSM document", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Doc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -104412,7 +126172,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -104459,6 +126219,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SM: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -104490,7 +126289,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -104556,6 +126355,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): StateMachine: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -104620,7 +126458,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -104667,6 +126505,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -104720,7 +126597,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -104729,6 +126606,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; OtherBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "OtherBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -104803,7 +126734,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -104831,6 +126762,60 @@ "ruleDescription": "Validate subnet CIDRs are within the CIDRs of the VPC", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): SubnetOutside: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetOutside", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -104949,7 +126934,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 10, "debug": 0 }, @@ -105035,6 +127020,73 @@ "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): SubnetA: No Metadata.com.aws.cloudformation.Context block found.; SubnetB: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -105262,7 +127314,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 4, + "warnings": 6, "informational": 18, "debug": 0 }, @@ -105483,6 +127535,99 @@ "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): SubnetA: No Metadata.com.aws.cloudformation.Context block found.; SubnetB: No Metadata.com.aws.cloudformation.Context block found.; SubnetC: No Metadata.com.aws.cloudformation.Context block found.; SubnetD: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetC", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetD", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -105917,7 +128062,7 @@ "counts": { "fatal": 2, "errors": 2, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -105980,6 +128125,25 @@ "endColumn": 6, "ruleDescription": "Validate Transform configuration", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -105992,7 +128156,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -106027,6 +128191,25 @@ "endColumn": 25, "ruleDescription": "AWSTemplateFormatVersion must be 2010-09-09", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -106039,7 +128222,7 @@ "counts": { "fatal": 2, "errors": 1, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -106088,6 +128271,25 @@ "endColumn": 10, "ruleDescription": "Validate Transform configuration", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -106100,7 +128302,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -106122,6 +128324,45 @@ "endColumn": 12, "ruleDescription": "Description must be a string", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -106134,7 +128375,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -106184,6 +128425,45 @@ "endColumn": 9, "ruleDescription": "Validate Transform configuration", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -106409,7 +128689,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -106436,6 +128716,45 @@ "ruleDescription": "Condition referenced by resource is not defined", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -106467,7 +128786,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -106521,6 +128840,45 @@ "endColumn": 24, "ruleDescription": "Array items must be unique when required", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -106533,7 +128891,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -106621,6 +128979,60 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): BadBucket: No Metadata.com.aws.cloudformation.Context block found.; FakeResource: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "FakeResource", + "resourceType": "AWS::Fake::NonExistent" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -106674,7 +129086,7 @@ "counts": { "fatal": 1, "errors": 3, - "warnings": 3, + "warnings": 5, "informational": 16, "debug": 0 }, @@ -106850,6 +129262,125 @@ "actualValue": "PublicRead" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): AppFunction: No Metadata.com.aws.cloudformation.Context block found.; AppRole: No Metadata.com.aws.cloudformation.Context block found.; AppSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; DataBucket: No Metadata.com.aws.cloudformation.Context block found.; DataTable: No Metadata.com.aws.cloudformation.Context block found.; QueueMapping: No Metadata.com.aws.cloudformation.Context block found.; TaskQueue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AppFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 66, + "startColumn": 4, + "endLine": 66, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "AppRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 34, + "startColumn": 4, + "endLine": 34, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AppSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 111, + "startColumn": 4, + "endLine": 111, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DataBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 46, + "startColumn": 4, + "endLine": 46, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DataTable", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 88, + "startColumn": 4, + "endLine": 88, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "QueueMapping", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 120, + "startColumn": 4, + "endLine": 120, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -107181,7 +129712,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 10, + "warnings": 12, "informational": 41, "debug": 0 }, @@ -107399,6 +129930,255 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (17 resource(s)): AdminSecretB9452750: No Metadata.com.aws.cloudformation.Context block found.; ConsumerLambdaLogGroupD33C6265: No Metadata.com.aws.cloudformation.Context block found.; RabbitMqBrokerE7F26F68: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionBD0C2D50: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRoleDefaultPolicyF1B83222: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRoleDefaultPolicyF0A9B06D: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionServiceRole095C1C28: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdaFunctionServiceRoleDefaultPolicy4396E5AC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AdminSecretB9452750", + "entityType": "Resource", + "resourceType": "AWS::SecretsManager::Secret" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 4, + "endLine": 16, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ConsumerLambdaLogGroupD33C6265", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 74, + "startColumn": 4, + "endLine": 74, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RabbitMqBrokerE7F26F68", + "resourceType": "AWS::AmazonMQ::Broker" + }, + "location": { + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionBD0C2D50", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 192, + "startColumn": 4, + "endLine": 192, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1CA0799D4", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 223, + "startColumn": 4, + "endLine": 223, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2520C928", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 1070, + "startColumn": 4, + "endLine": 1070, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema2C960A5F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 965, + "startColumn": 4, + "endLine": 965, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2Fwaiterstatema34D41C85", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1030, + "startColumn": 4, + "endLine": 1030, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1MqEsmDeleterCRAmazonMqRabbitmqLambdaStackconsumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1D1E2BA2FFB2C1A86", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "location": { + "startLine": 1097, + "startColumn": 4, + "endLine": 1097, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteB42ABDBF", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRole046BF68A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 372, + "startColumn": 4, + "endLine": 372, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1iscompleteServiceRoleDefaultPolicyF1B83222", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 396, + "startColumn": 4, + "endLine": 396, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventE34C977A", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRole606F1C54", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 257, + "startColumn": 4, + "endLine": 257, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionRabbitMqEventSourceAmazonMqRabbitmqLambdaStackRabbitMqBroker41CBF5C1oneventServiceRoleDefaultPolicyF0A9B06D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 303, + "startColumn": 4, + "endLine": 303, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionServiceRole095C1C28", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 108, + "startColumn": 4, + "endLine": 108, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdaFunctionServiceRoleDefaultPolicy4396E5AC", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 159, + "startColumn": 4, + "endLine": 159, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3012", "severity": "INFO", @@ -108215,7 +130995,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -108224,6 +131004,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MasterBranch: No Metadata.com.aws.cloudformation.Context block found.; testapp: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MasterBranch", + "entityType": "Resource", + "resourceType": "AWS::Amplify::Branch" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "testapp", + "resourceType": "AWS::Amplify::App" + }, + "location": { + "startLine": 10, + "startColumn": 4, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -108322,7 +131156,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 10, + "warnings": 12, "informational": 86, "debug": 0 }, @@ -108546,6 +131380,554 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (40 resource(s)): createItemFunction8D47E48A: No Metadata.com.aws.cloudformation.Context block found.; createItemFunctionServiceRole1BBF2178: No Metadata.com.aws.cloudformation.Context block found.; createItemFunctionServiceRoleDefaultPolicy8FAF1611: No Metadata.com.aws.cloudformation.Context block found.; deleteItemFunction2918B1B0: No Metadata.com.aws.cloudformation.Context block found.; deleteItemFunctionServiceRole5C201FCC: No Metadata.com.aws.cloudformation.Context block found.; deleteItemFunctionServiceRoleDefaultPolicyDCE46F14: No Metadata.com.aws.cloudformation.Context block found.; getAllItemsFunction0B7A913E: No Metadata.com.aws.cloudformation.Context block found.; getAllItemsFunctionServiceRoleCC084440: No Metadata.com.aws.cloudformation.Context block found.; getAllItemsFunctionServiceRoleDefaultPolicyF069C759: No Metadata.com.aws.cloudformation.Context block found.; getOneItemFunctionE3257B22: No Metadata.com.aws.cloudformation.Context block found.; getOneItemFunctionServiceRoleCFD54796: No Metadata.com.aws.cloudformation.Context block found.; getOneItemFunctionServiceRoleDefaultPolicy6B743AA8: No Metadata.com.aws.cloudformation.Context block found.; items07D08F4B: No Metadata.com.aws.cloudformation.Context block found.; itemsApi28111E1C: No Metadata.com.aws.cloudformation.Context block found.; itemsApiAccount591BF3E1: No Metadata.com.aws.cloudformation.Context block found.; itemsApiCloudWatchRoleB5C7B431: No Metadata.com.aws.cloudformation.Context block found.; itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce: No Metadata.com.aws.cloudformation.Context block found.; itemsApiDeploymentStageprodE77B897D: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitems9015DBED: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsGET59B0F78A: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsOPTIONSB46B4D53: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsPOSTDD3E83D0: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidA29927C2: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidDELETE21550005: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidGET38A333A8: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidOPTIONS62BD91D0: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidPATCH0548CB6A: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0: No Metadata.com.aws.cloudformation.Context block found.; itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711: No Metadata.com.aws.cloudformation.Context block found.; updateItemFunction59415205: No Metadata.com.aws.cloudformation.Context block found.; updateItemFunctionServiceRole40035396: No Metadata.com.aws.cloudformation.Context block found.; updateItemFunctionServiceRoleDefaultPolicy6A793729: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "createItemFunction8D47E48A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 407, + "startColumn": 4, + "endLine": 407, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "createItemFunctionServiceRole1BBF2178", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "createItemFunctionServiceRoleDefaultPolicy8FAF1611", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 373, + "startColumn": 4, + "endLine": 373, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "deleteItemFunction2918B1B0", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 663, + "startColumn": 4, + "endLine": 663, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "deleteItemFunctionServiceRole5C201FCC", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 572, + "startColumn": 4, + "endLine": 572, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "deleteItemFunctionServiceRoleDefaultPolicyDCE46F14", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 629, + "startColumn": 4, + "endLine": 629, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getAllItemsFunction0B7A913E", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 279, + "startColumn": 4, + "endLine": 279, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getAllItemsFunctionServiceRoleCC084440", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 188, + "startColumn": 4, + "endLine": 188, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getAllItemsFunctionServiceRoleDefaultPolicyF069C759", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 245, + "startColumn": 4, + "endLine": 245, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getOneItemFunctionE3257B22", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 151, + "startColumn": 4, + "endLine": 151, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getOneItemFunctionServiceRoleCFD54796", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 60, + "startColumn": 4, + "endLine": 60, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "getOneItemFunctionServiceRoleDefaultPolicy6B743AA8", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "items07D08F4B", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 26, + "startColumn": 4, + "endLine": 26, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApi28111E1C", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 675, + "startColumn": 4, + "endLine": 675, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiAccount591BF3E1", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 730, + "startColumn": 4, + "endLine": 730, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiCloudWatchRoleB5C7B431", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 711, + "startColumn": 4, + "endLine": 711, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiDeploymentFEC31BD04feb54db86e2f8eed94e1b28001143ce", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 753, + "startColumn": 4, + "endLine": 753, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiDeploymentStageprodE77B897D", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 772, + "startColumn": 4, + "endLine": 772, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitems9015DBED", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 790, + "startColumn": 4, + "endLine": 790, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsGET59B0F78A", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 917, + "startColumn": 4, + "endLine": 917, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitems2A648972", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 834, + "startColumn": 4, + "endLine": 834, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsF4364FB2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 874, + "startColumn": 4, + "endLine": 874, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsOPTIONSB46B4D53", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1089, + "startColumn": 4, + "endLine": 1089, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsPOSTApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitems7DA2B753", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 961, + "startColumn": 4, + "endLine": 961, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsPOSTApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132POSTitemsAE25CBB6", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1001, + "startColumn": 4, + "endLine": 1001, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsPOSTDD3E83D0", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1044, + "startColumn": 4, + "endLine": 1044, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidA29927C2", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 1104, + "startColumn": 4, + "endLine": 1104, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidDELETE21550005", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1485, + "startColumn": 4, + "endLine": 1485, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidDELETEApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid056EB521", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1402, + "startColumn": 4, + "endLine": 1402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidDELETEApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132DELETEitemsid4C18D4E2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1442, + "startColumn": 4, + "endLine": 1442, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidGET38A333A8", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1231, + "startColumn": 4, + "endLine": 1231, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidGETApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsid6D54AF22", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1148, + "startColumn": 4, + "endLine": 1148, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidGETApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132GETitemsidCA08693A", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1188, + "startColumn": 4, + "endLine": 1188, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidOPTIONS62BD91D0", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1530, + "startColumn": 4, + "endLine": 1530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidPATCH0548CB6A", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1358, + "startColumn": 4, + "endLine": 1358, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidPATCHApiPermissionApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsidEE9531C0", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1275, + "startColumn": 4, + "endLine": 1275, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemsApiitemsidPATCHApiPermissionTestApiLambdaCrudDynamoDBExampleitemsApiC8514132PATCHitemsid513A5711", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1315, + "startColumn": 4, + "endLine": 1315, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "updateItemFunction59415205", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 535, + "startColumn": 4, + "endLine": 535, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "updateItemFunctionServiceRole40035396", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 444, + "startColumn": 4, + "endLine": 444, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "updateItemFunctionServiceRoleDefaultPolicy6A793729", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -110491,7 +133873,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 34, "debug": 0 }, @@ -110543,6 +133925,268 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (18 resource(s)): ApiGatewayDynamoRole447127F0: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigw3449931B: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwAccount4D38593B: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwCloudWatchRoleC01BF930: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwDeploymentStageprodAE3424CD: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjob39EDA914: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjobPOST79D1CAC1: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjobjobId73AEE867: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwjobjobIdGETED10CC0C: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdaapigwloggroup1E36CCD4: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdafnAD6250E4: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdafnServiceRole607675A2: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdafnServiceRoleDefaultPolicy5AB65430: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdafnloggroup3D262524: No Metadata.com.aws.cloudformation.Context block found.; apigwasynclambdatable1075CD30: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiGatewayDynamoRole447127F0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 545, + "startColumn": 4, + "endLine": 545, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "apigwasynclambdaapigw3449931B", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwAccount4D38593B", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 222, + "startColumn": 4, + "endLine": 222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwCloudWatchRoleC01BF930", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 203, + "startColumn": 4, + "endLine": 203, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwDeploymentDA408F9D41ab700bc8db89ed7cb2c6250ab97c0a", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 240, + "startColumn": 4, + "endLine": 240, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwDeploymentStageprodAE3424CD", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 277, + "startColumn": 4, + "endLine": 277, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjob39EDA914", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 295, + "startColumn": 4, + "endLine": 295, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjobPOST79D1CAC1", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 426, + "startColumn": 4, + "endLine": 426, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjobPOSTApiPermissionApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob195929C9", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 331, + "startColumn": 4, + "endLine": 331, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjobPOSTApiPermissionTestApiGatewayAsyncLambdaStackapigwasynclambdaapigw016C0147POSTjob01D110CD", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 363, + "startColumn": 4, + "endLine": 363, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjobjobId73AEE867", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 441, + "startColumn": 4, + "endLine": 441, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwjobjobIdGETED10CC0C", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 505, + "startColumn": 4, + "endLine": 505, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdaapigwloggroup1E36CCD4", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 158, + "startColumn": 4, + "endLine": 158, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdafnAD6250E4", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 144, + "startColumn": 4, + "endLine": 144, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdafnServiceRole607675A2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdafnServiceRoleDefaultPolicy5AB65430", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 106, + "startColumn": 4, + "endLine": 106, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdafnloggroup3D262524", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "apigwasynclambdatable1075CD30", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 26, + "startColumn": 4, + "endLine": 26, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -111313,7 +134957,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 30, "debug": 0 }, @@ -111428,6 +135072,216 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (14 resource(s)): apiGwLogGroupConstructA23954E8: No Metadata.com.aws.cloudformation.Context block found.; authenticationlambdaDD3A2252: No Metadata.com.aws.cloudformation.Context block found.; authenticationlambdaServiceRole9798A92B: No Metadata.com.aws.cloudformation.Context block found.; authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2: No Metadata.com.aws.cloudformation.Context block found.; operationalAuthorizer363A7D2B: No Metadata.com.aws.cloudformation.Context block found.; operationallambdaFE43E13E: No Metadata.com.aws.cloudformation.Context block found.; operationallambdaServiceRole14B56EA5: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayDeploymentStagedevB80C9CD7: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayE22E31C5: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayhealth0EB12846: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayhealthGET9A80151C: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556: No Metadata.com.aws.cloudformation.Context block found.; restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "apiGwLogGroupConstructA23954E8", + "entityType": "Resource", + "resourceType": "Custom::LogRetention" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 414, + "startColumn": 4, + "endLine": 414, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "authenticationlambdaDD3A2252", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "authenticationlambdaServiceRole9798A92B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 236, + "startColumn": 4, + "endLine": 236, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "authenticationlambdagatewaylambdaauthstackoperationalAuthorizerD36E749EPermissionsCD2687F2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 333, + "startColumn": 4, + "endLine": 333, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "operationalAuthorizer363A7D2B", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "location": { + "startLine": 397, + "startColumn": 4, + "endLine": 397, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "operationallambdaFE43E13E", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 66, + "startColumn": 4, + "endLine": 66, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "operationallambdaServiceRole14B56EA5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayDeploymentB29CB257026bd226d852d73169d333911fdd4fa6", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 440, + "startColumn": 4, + "endLine": 440, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayDeploymentStagedevB80C9CD7", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 478, + "startColumn": 4, + "endLine": 478, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayE22E31C5", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 423, + "startColumn": 4, + "endLine": 423, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayhealth0EB12846", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 496, + "startColumn": 4, + "endLine": 496, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayhealthGET9A80151C", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 602, + "startColumn": 4, + "endLine": 602, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayhealthGETApiPermissionTestgatewaylambdaauthstackrestapigatewayAEDD1643GEThealthAF95E556", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 564, + "startColumn": 4, + "endLine": 564, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "restapigatewayhealthGETApiPermissiongatewaylambdaauthstackrestapigatewayAEDD1643GEThealth051F210D", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 532, + "startColumn": 4, + "endLine": 532, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -112106,7 +135960,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 16, + "warnings": 18, "informational": 33, "debug": 0 }, @@ -112441,6 +136295,307 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): lambdafunction1A09FC241: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction1SecurityGroupF7DF9E6F: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction1ServiceRoleA9EAFFE5: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction2F899168D: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction2SecurityGroup7268045A: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction2ServiceRole380A1BE9: No Metadata.com.aws.cloudformation.Context block found.; myapi4C7BF186: No Metadata.com.aws.cloudformation.Context block found.; myapiANYA805D87B: No Metadata.com.aws.cloudformation.Context block found.; myapiANYStartSyncExecutionRole7935C5BB: No Metadata.com.aws.cloudformation.Context block found.; myapiANYStartSyncExecutionRoleDefaultPolicyB90843F3: No Metadata.com.aws.cloudformation.Context block found.; myapiAccountEC421A0A: No Metadata.com.aws.cloudformation.Context block found.; myapiCloudWatchRole095452E5: No Metadata.com.aws.cloudformation.Context block found.; myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa: No Metadata.com.aws.cloudformation.Context block found.; myapiDeploymentStagedevB1704B15: No Metadata.com.aws.cloudformation.Context block found.; myapimessagesE5D75039: No Metadata.com.aws.cloudformation.Context block found.; myapimessagesGETE09B1C35: No Metadata.com.aws.cloudformation.Context block found.; mystatemachine15ECA539: No Metadata.com.aws.cloudformation.Context block found.; mystatemachineRole70AA91FD: No Metadata.com.aws.cloudformation.Context block found.; mystatemachineRoleDefaultPolicyEC6D0D79: No Metadata.com.aws.cloudformation.Context block found.; nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF: No Metadata.com.aws.cloudformation.Context block found.; stepfunctionsloggroup6EBF6C71: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "lambdafunction1A09FC241", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 173, + "startColumn": 4, + "endLine": 173, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "lambdafunction1SecurityGroupF7DF9E6F", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 105, + "startColumn": 4, + "endLine": 105, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdafunction1ServiceRoleA9EAFFE5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 80, + "startColumn": 4, + "endLine": 80, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdafunction2F899168D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 438, + "startColumn": 4, + "endLine": 438, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdafunction2SecurityGroup7268045A", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 370, + "startColumn": 4, + "endLine": 370, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdafunction2ServiceRole380A1BE9", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 345, + "startColumn": 4, + "endLine": 345, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapi4C7BF186", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 662, + "startColumn": 4, + "endLine": 662, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiANYA805D87B", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 901, + "startColumn": 4, + "endLine": 901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiANYStartSyncExecutionRole7935C5BB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 773, + "startColumn": 4, + "endLine": 773, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiANYStartSyncExecutionRoleDefaultPolicyB90843F3", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 799, + "startColumn": 4, + "endLine": 799, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiAccountEC421A0A", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 717, + "startColumn": 4, + "endLine": 717, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiCloudWatchRole095452E5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 698, + "startColumn": 4, + "endLine": 698, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiDeployment92F2CB49668bc8f388b84571173cc408b70fc6fa", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 734, + "startColumn": 4, + "endLine": 734, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapiDeploymentStagedevB1704B15", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 753, + "startColumn": 4, + "endLine": 753, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapimessagesE5D75039", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 919, + "startColumn": 4, + "endLine": 919, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myapimessagesGETE09B1C35", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 938, + "startColumn": 4, + "endLine": 938, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mystatemachine15ECA539", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 652, + "startColumn": 4, + "endLine": 652, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mystatemachineRole70AA91FD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mystatemachineRoleDefaultPolicyEC6D0D79", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 586, + "startColumn": 4, + "endLine": 586, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstacklambdaNestedStacknestedstacklambdaNestedStackResource113B56AF", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 29, + "startColumn": 4, + "endLine": 29, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "stepfunctionsloggroup6EBF6C71", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 481, + "startColumn": 4, + "endLine": 481, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -113169,7 +137324,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 31, "debug": 0 }, @@ -113178,6 +137333,255 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (17 resource(s)): nestedstackvpc4488A7AF: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcIGW1E72194C: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcVPCGWA39BF2BE: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194: No Metadata.com.aws.cloudformation.Context block found.; nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "nestedstackvpc4488A7AF", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "nestedstackvpcIGW1E72194C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 331, + "startColumn": 4, + "endLine": 331, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcVPCGWA39BF2BE", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 345, + "startColumn": 4, + "endLine": 345, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTable5302591F", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 237, + "startColumn": 4, + "endLine": 237, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet1RouteTableAssociation6C6975EB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 251, + "startColumn": 4, + "endLine": 251, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet1Subnet46C8720E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableAssociation61E13F31", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet2RouteTableEA03EC80", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 303, + "startColumn": 4, + "endLine": 303, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcprivateisolatedsubnet1Subnet2Subnet89BFE59F", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet1DefaultRouteA3ABB16E", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet1RouteTable518786D0", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet1RouteTableAssociationE08618B5", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet1Subnet89E5486A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet2DefaultRouteC44F12D1", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet2RouteTableAssociation432D9A37", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet2RouteTableF3884194", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nestedstackvpcpublicsubnet1Subnet2Subnet778CFACA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 136, + "startColumn": 4, + "endLine": 136, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -113934,7 +138338,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 22, "debug": 0 }, @@ -114003,6 +138407,307 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): chatappapi: No Metadata.com.aws.cloudformation.Context block found.; chatappapideployment: No Metadata.com.aws.cloudformation.Context block found.; chatappapiiamrole2977C2A3: No Metadata.com.aws.cloudformation.Context block found.; chatappapiiamroleDefaultPolicy6238E5A8: No Metadata.com.aws.cloudformation.Context block found.; chatappapistage: No Metadata.com.aws.cloudformation.Context block found.; chatappapitable5244EF8B: No Metadata.com.aws.cloudformation.Context block found.; connectlambdaFFAE59F3: No Metadata.com.aws.cloudformation.Context block found.; connectlambdaServiceRole04DCF570: No Metadata.com.aws.cloudformation.Context block found.; connectlambdaServiceRoleDefaultPolicy53E94D8B: No Metadata.com.aws.cloudformation.Context block found.; connectlambdaintegration: No Metadata.com.aws.cloudformation.Context block found.; connectroute: No Metadata.com.aws.cloudformation.Context block found.; disconnectlambdaAC22A441: No Metadata.com.aws.cloudformation.Context block found.; disconnectlambdaServiceRole2779F08C: No Metadata.com.aws.cloudformation.Context block found.; disconnectlambdaServiceRoleDefaultPolicy03D2B807: No Metadata.com.aws.cloudformation.Context block found.; disconnectlambdaintegration: No Metadata.com.aws.cloudformation.Context block found.; disconnectroute: No Metadata.com.aws.cloudformation.Context block found.; messagelambda16C1C2A3: No Metadata.com.aws.cloudformation.Context block found.; messagelambdaServiceRole544EC18A: No Metadata.com.aws.cloudformation.Context block found.; messagelambdaServiceRoleDefaultPolicy76F57A7D: No Metadata.com.aws.cloudformation.Context block found.; messagelambdaintegration: No Metadata.com.aws.cloudformation.Context block found.; messageroute: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "chatappapi", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 4, + "endLine": 10, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "chatappapideployment", + "resourceType": "AWS::ApiGatewayV2::Deployment" + }, + "location": { + "startLine": 684, + "startColumn": 4, + "endLine": 684, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "chatappapiiamrole2977C2A3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 454, + "startColumn": 4, + "endLine": 454, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "chatappapiiamroleDefaultPolicy6238E5A8", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 497, + "startColumn": 4, + "endLine": 497, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "chatappapistage", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "location": { + "startLine": 700, + "startColumn": 4, + "endLine": 700, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "chatappapitable5244EF8B", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "connectlambdaFFAE59F3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 161, + "startColumn": 4, + "endLine": 161, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "connectlambdaServiceRole04DCF570", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 71, + "startColumn": 4, + "endLine": 71, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "connectlambdaServiceRoleDefaultPolicy53E94D8B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 128, + "startColumn": 4, + "endLine": 128, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "connectlambdaintegration", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 530, + "startColumn": 4, + "endLine": 530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "connectroute", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 620, + "startColumn": 4, + "endLine": 620, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "disconnectlambdaAC22A441", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 288, + "startColumn": 4, + "endLine": 288, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "disconnectlambdaServiceRole2779F08C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 198, + "startColumn": 4, + "endLine": 198, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "disconnectlambdaServiceRoleDefaultPolicy03D2B807", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 255, + "startColumn": 4, + "endLine": 255, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "disconnectlambdaintegration", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 563, + "startColumn": 4, + "endLine": 563, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "disconnectroute", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 644, + "startColumn": 4, + "endLine": 644, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "messagelambda16C1C2A3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "messagelambdaServiceRole544EC18A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 325, + "startColumn": 4, + "endLine": 325, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "messagelambdaServiceRoleDefaultPolicy76F57A7D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 398, + "startColumn": 4, + "endLine": 398, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "messagelambdaintegration", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 596, + "startColumn": 4, + "endLine": 596, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "messageroute", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 668, + "startColumn": 4, + "endLine": 668, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -114495,7 +139200,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 72, "debug": 0 }, @@ -114603,6 +139308,489 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (35 resource(s)): ASG46ED3070: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceProfile0A2834D7: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceRoleE263A41B: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceSecurityGroup0525485D: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3: No Metadata.com.aws.cloudformation.Context block found.; ASGLaunchConfigC00AF12B: No Metadata.com.aws.cloudformation.Context block found.; ASGScalingPolicyAModestLoadC5714E5A: No Metadata.com.aws.cloudformation.Context block found.; LB8A12904C: No Metadata.com.aws.cloudformation.Context block found.; LBListener49E825B4: No Metadata.com.aws.cloudformation.Context block found.; LBListenerTargetGroupF04FCF6D: No Metadata.com.aws.cloudformation.Context block found.; LBSecurityGroup8A41EA2B: No Metadata.com.aws.cloudformation.Context block found.; LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36: No Metadata.com.aws.cloudformation.Context block found.; VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWB7E252D3: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1DefaultRouteAE1D6490: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableAssociation347902D1: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableBE8A6027: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1Subnet8BCA10E0: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2DefaultRouteF4F5CFD2: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2RouteTable0A19E10E: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2RouteTableAssociation0C73D413: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2SubnetCFCDAA7A: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1DefaultRoute91CEF279: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1EIP6AD938E8: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1NATGatewayE0556630: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableAssociation0B0896DC: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableFEE4B781: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1SubnetB4246D30: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2DefaultRouteB7481BBA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2EIP4947BC00: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2NATGateway3C070193: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTable6F1A15F1: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTableAssociation5A808732: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2Subnet74179F39: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW99B986DC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ASG46ED3070", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 614, + "startColumn": 4, + "endLine": 614, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ASGInstanceProfile0A2834D7", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 547, + "startColumn": 4, + "endLine": 547, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceRoleE263A41B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 534, + "startColumn": 4, + "endLine": 534, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceSecurityGroup0525485D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 484, + "startColumn": 4, + "endLine": 484, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 508, + "startColumn": 4, + "endLine": 508, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGLaunchConfigC00AF12B", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 576, + "startColumn": 4, + "endLine": 576, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGScalingPolicyAModestLoadC5714E5A", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 691, + "startColumn": 4, + "endLine": 691, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LB8A12904C", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 729, + "startColumn": 4, + "endLine": 729, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBListener49E825B4", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 795, + "startColumn": 4, + "endLine": 795, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBListenerTargetGroupF04FCF6D", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 815, + "startColumn": 4, + "endLine": 815, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBSecurityGroup8A41EA2B", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 750, + "startColumn": 4, + "endLine": 750, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "location": { + "startLine": 774, + "startColumn": 4, + "endLine": 774, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWB7E252D3", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableBE8A6027", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1Subnet8BCA10E0", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2RouteTable0A19E10E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2SubnetCFCDAA7A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1DefaultRoute91CEF279", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1EIP6AD938E8", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1NATGatewayE0556630", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableFEE4B781", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1SubnetB4246D30", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2DefaultRouteB7481BBA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2EIP4947BC00", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2NATGateway3C070193", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTable6F1A15F1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTableAssociation5A808732", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2Subnet74179F39", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW99B986DC", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -116293,7 +141481,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 22, "debug": 0 }, @@ -116302,6 +141490,216 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (14 resource(s)): CarApiCarsDataSourceD8C35DA8: No Metadata.com.aws.cloudformation.Context block found.; CarApiCarsDataSourceServiceRole82F3FC8A: No Metadata.com.aws.cloudformation.Context block found.; CarApiCarsDataSourceServiceRoleDefaultPolicy007C80E8: No Metadata.com.aws.cloudformation.Context block found.; CarApiDefectsDataSourceEBF3B13F: No Metadata.com.aws.cloudformation.Context block found.; CarApiDefectsDataSourceServiceRole7EDF6907: No Metadata.com.aws.cloudformation.Context block found.; CarApiDefectsDataSourceServiceRoleDefaultPolicy8BFE0912: No Metadata.com.aws.cloudformation.Context block found.; CarApiE5E7ACF5: No Metadata.com.aws.cloudformation.Context block found.; CarApiSchema8E4784D9: No Metadata.com.aws.cloudformation.Context block found.; CarTableA597893A: No Metadata.com.aws.cloudformation.Context block found.; CarsFunction7C2F2ED2: No Metadata.com.aws.cloudformation.Context block found.; DefectsFunction929174B7: No Metadata.com.aws.cloudformation.Context block found.; DefectsTable2A57950B: No Metadata.com.aws.cloudformation.Context block found.; PipelineResolverGetCars2DDF5816: No Metadata.com.aws.cloudformation.Context block found.; PipelineResolverGetDefects032EF131: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CarApiCarsDataSourceD8C35DA8", + "entityType": "Resource", + "resourceType": "AWS::AppSync::DataSource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 191, + "startColumn": 4, + "endLine": 191, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CarApiCarsDataSourceServiceRole82F3FC8A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiCarsDataSourceServiceRoleDefaultPolicy007C80E8", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 163, + "startColumn": 4, + "endLine": 163, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiDefectsDataSourceEBF3B13F", + "resourceType": "AWS::AppSync::DataSource" + }, + "location": { + "startLine": 297, + "startColumn": 4, + "endLine": 297, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiDefectsDataSourceServiceRole7EDF6907", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 211, + "startColumn": 4, + "endLine": 211, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiDefectsDataSourceServiceRoleDefaultPolicy8BFE0912", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiE5E7ACF5", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "location": { + "startLine": 86, + "startColumn": 4, + "endLine": 86, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarApiSchema8E4784D9", + "resourceType": "AWS::AppSync::GraphQLSchema" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarTableA597893A", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 26, + "startColumn": 4, + "endLine": 26, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CarsFunction7C2F2ED2", + "resourceType": "AWS::AppSync::FunctionConfiguration" + }, + "location": { + "startLine": 325, + "startColumn": 4, + "endLine": 325, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DefectsFunction929174B7", + "resourceType": "AWS::AppSync::FunctionConfiguration" + }, + "location": { + "startLine": 353, + "startColumn": 4, + "endLine": 353, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DefectsTable2A57950B", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 75, + "startColumn": 4, + "endLine": 75, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PipelineResolverGetCars2DDF5816", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 390, + "startColumn": 4, + "endLine": 390, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PipelineResolverGetDefects032EF131", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 427, + "startColumn": 4, + "endLine": 427, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -116806,7 +142204,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 16, "debug": 0 }, @@ -116835,6 +142233,177 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): AppSync2EventBridgeApi: No Metadata.com.aws.cloudformation.Context block found.; AppSync2EventBridgeApiKey: No Metadata.com.aws.cloudformation.Context block found.; AppSyncEventBridgeRle2A25B9B1: No Metadata.com.aws.cloudformation.Context block found.; AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50: No Metadata.com.aws.cloudformation.Context block found.; AppSyncEventBridgeRoleDefaultPolicyC796B118: No Metadata.com.aws.cloudformation.Context block found.; AppSyncEventBridgeRoleE2F34FE0: No Metadata.com.aws.cloudformation.Context block found.; ItemsDataSource: No Metadata.com.aws.cloudformation.Context block found.; ItemsSchema: No Metadata.com.aws.cloudformation.Context block found.; PutEventMutationResolver: No Metadata.com.aws.cloudformation.Context block found.; echoFunction5207BE9B: No Metadata.com.aws.cloudformation.Context block found.; echoFunctionServiceRole1EBD6DF0: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AppSync2EventBridgeApi", + "entityType": "Resource", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 4, + "endLine": 9, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "AppSync2EventBridgeApiKey", + "resourceType": "AWS::AppSync::ApiKey" + }, + "location": { + "startLine": 23, + "startColumn": 4, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AppSyncEventBridgeRle2A25B9B1", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 230, + "startColumn": 4, + "endLine": 230, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AppSyncEventBridgeRleAllowEventRuleAppSyncEventBridgeechoFunction7F06E48E35535C50", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 252, + "startColumn": 4, + "endLine": 252, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AppSyncEventBridgeRoleDefaultPolicyC796B118", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 82, + "startColumn": 4, + "endLine": 82, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AppSyncEventBridgeRoleE2F34FE0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ItemsDataSource", + "resourceType": "AWS::AppSync::DataSource" + }, + "location": { + "startLine": 127, + "startColumn": 4, + "endLine": 127, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ItemsSchema", + "resourceType": "AWS::AppSync::GraphQLSchema" + }, + "location": { + "startLine": 38, + "startColumn": 4, + "endLine": 38, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PutEventMutationResolver", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 149, + "startColumn": 4, + "endLine": 149, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "echoFunction5207BE9B", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 205, + "startColumn": 4, + "endLine": 205, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "echoFunctionServiceRole1EBD6DF0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 183, + "startColumn": 4, + "endLine": 183, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -117199,7 +142768,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 17, "debug": 0 }, @@ -117208,6 +142777,138 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): DeleteMutationResolver: No Metadata.com.aws.cloudformation.Context block found.; GetAllQueryResolver: No Metadata.com.aws.cloudformation.Context block found.; GetOneQueryResolver: No Metadata.com.aws.cloudformation.Context block found.; PostsApiCdk: No Metadata.com.aws.cloudformation.Context block found.; PostsApiKey: No Metadata.com.aws.cloudformation.Context block found.; PostsDataSource: No Metadata.com.aws.cloudformation.Context block found.; PostsSchema: No Metadata.com.aws.cloudformation.Context block found.; SaveMutationResolver: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DeleteMutationResolver", + "entityType": "Resource", + "resourceType": "AWS::AppSync::Resolver" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "GetAllQueryResolver", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 107, + "startColumn": 4, + "endLine": 107, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GetOneQueryResolver", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 82, + "startColumn": 4, + "endLine": 82, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PostsApiCdk", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "location": { + "startLine": 9, + "startColumn": 4, + "endLine": 9, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PostsApiKey", + "resourceType": "AWS::AppSync::ApiKey" + }, + "location": { + "startLine": 23, + "startColumn": 4, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PostsDataSource", + "resourceType": "AWS::AppSync::DataSource" + }, + "location": { + "startLine": 57, + "startColumn": 4, + "endLine": 57, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PostsSchema", + "resourceType": "AWS::AppSync::GraphQLSchema" + }, + "location": { + "startLine": 38, + "startColumn": 4, + "endLine": 38, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SaveMutationResolver", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 132, + "startColumn": 4, + "endLine": 132, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -117612,7 +143313,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 8, + "warnings": 10, "informational": 8, "debug": 0 }, @@ -117793,6 +143494,138 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): Construct1FunctionWithReservedCEs6458B719: No Metadata.com.aws.cloudformation.Context block found.; Construct1FunctionWithReservedCEsServiceRole21C8F977: No Metadata.com.aws.cloudformation.Context block found.; Construct1StandardFunctionD5361E84: No Metadata.com.aws.cloudformation.Context block found.; Construct1StandardFunctionServiceRole716388BA: No Metadata.com.aws.cloudformation.Context block found.; Construct2FunctionWithReservedCEs89864BB2: No Metadata.com.aws.cloudformation.Context block found.; Construct2FunctionWithReservedCEsServiceRoleB80261C4: No Metadata.com.aws.cloudformation.Context block found.; Construct2StandardFunction1EBDBFFA: No Metadata.com.aws.cloudformation.Context block found.; Construct2StandardFunctionServiceRole450FEF35: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Construct1FunctionWithReservedCEs6458B719", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 112, + "startColumn": 4, + "endLine": 112, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Construct1FunctionWithReservedCEsServiceRole21C8F977", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 89, + "startColumn": 4, + "endLine": 89, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct1StandardFunctionD5361E84", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct1StandardFunctionServiceRole716388BA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct2FunctionWithReservedCEs89864BB2", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 226, + "startColumn": 4, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct2FunctionWithReservedCEsServiceRoleB80261C4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 203, + "startColumn": 4, + "endLine": 203, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct2StandardFunction1EBDBFFA", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 169, + "startColumn": 4, + "endLine": 169, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Construct2StandardFunctionServiceRole450FEF35", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 146, + "startColumn": 4, + "endLine": 146, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -117964,7 +143797,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -117973,6 +143806,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): IncomingDataBucket3554D835: No Metadata.com.aws.cloudformation.Context block found.; IncomingDataBucketPolicyCA22042A: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IncomingDataBucket3554D835", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "IncomingDataBucketPolicyCA22042A", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 75, + "startColumn": 4, + "endLine": 75, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -118049,7 +143936,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 54, "debug": 0 }, @@ -118078,6 +143965,398 @@ "ruleDescription": "Security group allows open access to sensitive port", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (28 resource(s)): AlarmMetricFilter9DBA3966: No Metadata.com.aws.cloudformation.Context block found.; CloudWatchLoggingRole8E23D1D4: No Metadata.com.aws.cloudformation.Context block found.; MetricFilter1B93B6E5: No Metadata.com.aws.cloudformation.Context block found.; SFTPServer: No Metadata.com.aws.cloudformation.Context block found.; SFTPUser: No Metadata.com.aws.cloudformation.Context block found.; SftpAccessPolicy6C559C82: No Metadata.com.aws.cloudformation.Context block found.; SftpAccessRoleBDBB5CE1: No Metadata.com.aws.cloudformation.Context block found.; SftpEIP1: No Metadata.com.aws.cloudformation.Context block found.; SftpEIP2: No Metadata.com.aws.cloudformation.Context block found.; SftpLogGroupC79A244B: No Metadata.com.aws.cloudformation.Context block found.; SftpServerSG79C38856: No Metadata.com.aws.cloudformation.Context block found.; VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWB7E252D3: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1RouteTableAssociationA2D18F7C: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1RouteTableEB156210: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1SubnetEBD00FC6: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2RouteTable9B4F78DC: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2Subnet4B1C8CAA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1DefaultRoute91CEF279: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableAssociation0B0896DC: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableFEE4B781: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1SubnetB4246D30: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2DefaultRouteB7481BBA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTable6F1A15F1: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTableAssociation5A808732: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2Subnet74179F39: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW99B986DC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AlarmMetricFilter9DBA3966", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 670, + "startColumn": 4, + "endLine": 670, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CloudWatchLoggingRole8E23D1D4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 397, + "startColumn": 4, + "endLine": 397, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MetricFilter1B93B6E5", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 653, + "startColumn": 4, + "endLine": 653, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SFTPServer", + "resourceType": "AWS::Transfer::Server" + }, + "location": { + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SFTPUser", + "resourceType": "AWS::Transfer::User" + }, + "location": { + "startLine": 633, + "startColumn": 4, + "endLine": 633, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpAccessPolicy6C559C82", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 548, + "startColumn": 4, + "endLine": 548, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpAccessRoleBDBB5CE1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 574, + "startColumn": 4, + "endLine": 574, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpEIP1", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 437, + "startColumn": 4, + "endLine": 437, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpEIP2", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 446, + "startColumn": 4, + "endLine": 446, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpLogGroupC79A244B", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 599, + "startColumn": 4, + "endLine": 599, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpServerSG79C38856", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWB7E252D3", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 331, + "startColumn": 4, + "endLine": 331, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 251, + "startColumn": 4, + "endLine": 251, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1RouteTableEB156210", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 237, + "startColumn": 4, + "endLine": 237, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1SubnetEBD00FC6", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2RouteTable9B4F78DC", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 303, + "startColumn": 4, + "endLine": 303, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1DefaultRoute91CEF279", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableFEE4B781", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1SubnetB4246D30", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2DefaultRouteB7481BBA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTable6F1A15F1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTableAssociation5A808732", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2Subnet74179F39", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 136, + "startColumn": 4, + "endLine": 136, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW99B986DC", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 345, + "startColumn": 4, + "endLine": 345, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -119340,7 +145619,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 54, "debug": 0 }, @@ -119369,6 +145648,398 @@ "ruleDescription": "Security group allows open access to sensitive port", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (28 resource(s)): AlarmMetricFilter9DBA3966: No Metadata.com.aws.cloudformation.Context block found.; CloudWatchLoggingRole8E23D1D4: No Metadata.com.aws.cloudformation.Context block found.; MetricFilter1B93B6E5: No Metadata.com.aws.cloudformation.Context block found.; SFTPServer: No Metadata.com.aws.cloudformation.Context block found.; SFTPUser: No Metadata.com.aws.cloudformation.Context block found.; SftpAccessPolicy6C559C82: No Metadata.com.aws.cloudformation.Context block found.; SftpAccessRoleBDBB5CE1: No Metadata.com.aws.cloudformation.Context block found.; SftpEIP1: No Metadata.com.aws.cloudformation.Context block found.; SftpEIP2: No Metadata.com.aws.cloudformation.Context block found.; SftpLogGroupC79A244B: No Metadata.com.aws.cloudformation.Context block found.; SftpServerSG79C38856: No Metadata.com.aws.cloudformation.Context block found.; VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWB7E252D3: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1RouteTableAssociationA2D18F7C: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1RouteTableEB156210: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet1SubnetEBD00FC6: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2RouteTable9B4F78DC: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB: No Metadata.com.aws.cloudformation.Context block found.; VPCIsolatedSubnet2Subnet4B1C8CAA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1DefaultRoute91CEF279: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableAssociation0B0896DC: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableFEE4B781: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1SubnetB4246D30: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2DefaultRouteB7481BBA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTable6F1A15F1: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTableAssociation5A808732: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2Subnet74179F39: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW99B986DC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AlarmMetricFilter9DBA3966", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 670, + "startColumn": 4, + "endLine": 670, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CloudWatchLoggingRole8E23D1D4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 397, + "startColumn": 4, + "endLine": 397, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MetricFilter1B93B6E5", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 653, + "startColumn": 4, + "endLine": 653, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SFTPServer", + "resourceType": "AWS::Transfer::Server" + }, + "location": { + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SFTPUser", + "resourceType": "AWS::Transfer::User" + }, + "location": { + "startLine": 633, + "startColumn": 4, + "endLine": 633, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpAccessPolicy6C559C82", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 548, + "startColumn": 4, + "endLine": 548, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpAccessRoleBDBB5CE1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 574, + "startColumn": 4, + "endLine": 574, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpEIP1", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 437, + "startColumn": 4, + "endLine": 437, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpEIP2", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 446, + "startColumn": 4, + "endLine": 446, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpLogGroupC79A244B", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 599, + "startColumn": 4, + "endLine": 599, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SftpServerSG79C38856", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 428, + "startColumn": 4, + "endLine": 428, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWB7E252D3", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 331, + "startColumn": 4, + "endLine": 331, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1RouteTableAssociationA2D18F7C", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 251, + "startColumn": 4, + "endLine": 251, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1RouteTableEB156210", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 237, + "startColumn": 4, + "endLine": 237, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet1SubnetEBD00FC6", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2RouteTable9B4F78DC", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 303, + "startColumn": 4, + "endLine": 303, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2RouteTableAssociation7BF8E0EB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 317, + "startColumn": 4, + "endLine": 317, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIsolatedSubnet2Subnet4B1C8CAA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1DefaultRoute91CEF279", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableFEE4B781", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1SubnetB4246D30", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2DefaultRouteB7481BBA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTable6F1A15F1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTableAssociation5A808732", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2Subnet74179F39", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 136, + "startColumn": 4, + "endLine": 136, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW99B986DC", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 345, + "startColumn": 4, + "endLine": 345, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -120631,7 +147302,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -120640,6 +147311,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): Role1ABCC5F0: No Metadata.com.aws.cloudformation.Context block found.; RoleDefaultPolicy5FFB7DAB: No Metadata.com.aws.cloudformation.Context block found.; Vault23237E5B: No Metadata.com.aws.cloudformation.Context block found.; demobackupplan32CA9462: No Metadata.com.aws.cloudformation.Context block found.; demobackupplanSelectionF4B47C20: No Metadata.com.aws.cloudformation.Context block found.; testBucketDF4D7D1A: No Metadata.com.aws.cloudformation.Context block found.; testBucketPolicy47484917: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Role1ABCC5F0", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "RoleDefaultPolicy5FFB7DAB", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vault23237E5B", + "resourceType": "AWS::Backup::BackupVault" + }, + "location": { + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "demobackupplan32CA9462", + "resourceType": "AWS::Backup::BackupPlan" + }, + "location": { + "startLine": 246, + "startColumn": 4, + "endLine": 246, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "demobackupplanSelectionF4B47C20", + "resourceType": "AWS::Backup::BackupSelection" + }, + "location": { + "startLine": 276, + "startColumn": 4, + "endLine": 276, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "testBucketDF4D7D1A", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "testBucketPolicy47484917", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -120764,7 +147554,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 62, "debug": 0 }, @@ -120813,6 +147603,528 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (38 resource(s)): BatchInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; BatchInstanceRole8DB66C4C: No Metadata.com.aws.cloudformation.Context block found.; BatchJobRole37A83758: No Metadata.com.aws.cloudformation.Context block found.; BatchLaunchTemplateBD674258: No Metadata.com.aws.cloudformation.Context block found.; BatchLaunchTemplateProfile5BDFE5F8: No Metadata.com.aws.cloudformation.Context block found.; BatchSecurityGroup77EC865F: No Metadata.com.aws.cloudformation.Context block found.; BatchServiceRole57930367: No Metadata.com.aws.cloudformation.Context block found.; JobSubmitterFunctionFAE645C8: No Metadata.com.aws.cloudformation.Context block found.; JobSubmitterFunctionLogGroupF7938D09: No Metadata.com.aws.cloudformation.Context block found.; JobSubmitterFunctionServiceRole55AD6E92: No Metadata.com.aws.cloudformation.Context block found.; JobSubmitterFunctionServiceRoleDefaultPolicy4C5D0E3F: No Metadata.com.aws.cloudformation.Context block found.; OpenMPComputeEnvironment: No Metadata.com.aws.cloudformation.Context block found.; OpenMPJobDefinition: No Metadata.com.aws.cloudformation.Context block found.; OpenMPJobQueue: No Metadata.com.aws.cloudformation.Context block found.; OpenMPLogGroup95FEB040: No Metadata.com.aws.cloudformation.Context block found.; OpenMPRepositoryAB8BB3BC: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCF5EF58EB: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCIGW3DBDF942: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet1RouteTable3DBEEA60: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet1Subnet95C8C324: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet2RouteTable7EFB668D: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPrivateSubnet2Subnet039333AF: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1DefaultRoute5FD9D646: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1EIP53BE2C61: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1NATGateway29BD3E8B: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1RouteTableDADE381A: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet1Subnet4888FED8: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet2DefaultRouteF2C059E2: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet2RouteTable29142B7F: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCPublicSubnet2Subnet7642A39F: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCRestrictDefaultSecurityGroupCustomResourceA3D51E90: No Metadata.com.aws.cloudformation.Context block found.; OpenMPVPCVPCGWDD05DB82: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BatchInstanceProfile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 661, + "startColumn": 4, + "endLine": 661, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BatchInstanceRole8DB66C4C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 648, + "startColumn": 4, + "endLine": 648, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BatchJobRole37A83758", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 843, + "startColumn": 4, + "endLine": 843, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BatchLaunchTemplateBD674258", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 741, + "startColumn": 4, + "endLine": 741, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BatchLaunchTemplateProfile5BDFE5F8", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 674, + "startColumn": 4, + "endLine": 674, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BatchSecurityGroup77EC865F", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 580, + "startColumn": 4, + "endLine": 580, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BatchServiceRole57930367", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 614, + "startColumn": 4, + "endLine": 614, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "JobSubmitterFunctionFAE645C8", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1077, + "startColumn": 4, + "endLine": 1077, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "JobSubmitterFunctionLogGroupF7938D09", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 1099, + "startColumn": 4, + "endLine": 1099, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "JobSubmitterFunctionServiceRole55AD6E92", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1000, + "startColumn": 4, + "endLine": 1000, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "JobSubmitterFunctionServiceRoleDefaultPolicy4C5D0E3F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1028, + "startColumn": 4, + "endLine": 1028, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPComputeEnvironment", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "location": { + "startLine": 791, + "startColumn": 4, + "endLine": 791, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPJobDefinition", + "resourceType": "AWS::Batch::JobDefinition" + }, + "location": { + "startLine": 966, + "startColumn": 4, + "endLine": 966, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPJobQueue", + "resourceType": "AWS::Batch::JobQueue" + }, + "location": { + "startLine": 809, + "startColumn": 4, + "endLine": 809, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPLogGroup95FEB040", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 855, + "startColumn": 4, + "endLine": 855, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPRepositoryAB8BB3BC", + "resourceType": "AWS::ECR::Repository" + }, + "location": { + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCF5EF58EB", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 34, + "startColumn": 4, + "endLine": 34, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCIGW3DBDF942", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 420, + "startColumn": 4, + "endLine": 420, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet1DefaultRoute7EB9EABF", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 325, + "startColumn": 4, + "endLine": 325, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet1RouteTable3DBEEA60", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet1RouteTableAssociationD2C7C327", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 310, + "startColumn": 4, + "endLine": 310, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet1Subnet95C8C324", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 279, + "startColumn": 4, + "endLine": 279, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet2DefaultRouteA5C36AF6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 406, + "startColumn": 4, + "endLine": 406, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet2RouteTable7EFB668D", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 377, + "startColumn": 4, + "endLine": 377, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet2RouteTableAssociation50872E14", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 391, + "startColumn": 4, + "endLine": 391, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPrivateSubnet2Subnet039333AF", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 360, + "startColumn": 4, + "endLine": 360, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1DefaultRoute5FD9D646", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 118, + "startColumn": 4, + "endLine": 118, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1EIP53BE2C61", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 133, + "startColumn": 4, + "endLine": 133, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1NATGateway29BD3E8B", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 160, + "startColumn": 4, + "endLine": 160, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1RouteTableAssociationB4BDC09E", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 100, + "startColumn": 4, + "endLine": 100, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1RouteTableDADE381A", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 86, + "startColumn": 4, + "endLine": 86, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet1Subnet4888FED8", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet2DefaultRouteF2C059E2", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 244, + "startColumn": 4, + "endLine": 244, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet2RouteTable29142B7F", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet2RouteTableAssociationA72D6947", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 226, + "startColumn": 4, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCPublicSubnet2Subnet7642A39F", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCRestrictDefaultSecurityGroupCustomResourceA3D51E90", + "resourceType": "Custom::VpcRestrictDefaultSG" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenMPVPCVPCGWDD05DB82", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 434, + "startColumn": 4, + "endLine": 434, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -122236,7 +149548,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 65, "debug": 0 }, @@ -122264,6 +149576,450 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (32 resource(s)): ASG46ED3070: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceProfile0A2834D7: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceRoleE263A41B: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceSecurityGroup0525485D: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3: No Metadata.com.aws.cloudformation.Context block found.; ASGLaunchConfigC00AF12B: No Metadata.com.aws.cloudformation.Context block found.; LB8A12904C: No Metadata.com.aws.cloudformation.Context block found.; LBSecurityGroup8A41EA2B: No Metadata.com.aws.cloudformation.Context block found.; LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36: No Metadata.com.aws.cloudformation.Context block found.; VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWB7E252D3: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1DefaultRouteAE1D6490: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableAssociation347902D1: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableBE8A6027: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1Subnet8BCA10E0: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2DefaultRouteF4F5CFD2: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2RouteTable0A19E10E: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2RouteTableAssociation0C73D413: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet2SubnetCFCDAA7A: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1DefaultRoute91CEF279: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1EIP6AD938E8: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1NATGatewayE0556630: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableAssociation0B0896DC: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableFEE4B781: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1SubnetB4246D30: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2DefaultRouteB7481BBA: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2EIP4947BC00: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2NATGateway3C070193: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTable6F1A15F1: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2RouteTableAssociation5A808732: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet2Subnet74179F39: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW99B986DC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ASG46ED3070", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 614, + "startColumn": 4, + "endLine": 614, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ASGInstanceProfile0A2834D7", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 547, + "startColumn": 4, + "endLine": 547, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceRoleE263A41B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 534, + "startColumn": 4, + "endLine": 534, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceSecurityGroup0525485D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 484, + "startColumn": 4, + "endLine": 484, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceSecurityGroupfromLoadBalancerStackLBSecurityGroupB71A4BA880C28BC1C3", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 508, + "startColumn": 4, + "endLine": 508, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGLaunchConfigC00AF12B", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 576, + "startColumn": 4, + "endLine": 576, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LB8A12904C", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 706, + "startColumn": 4, + "endLine": 706, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBSecurityGroup8A41EA2B", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 635, + "startColumn": 4, + "endLine": 635, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LBSecurityGrouptoLoadBalancerStackASGInstanceSecurityGroupB0050A1780E09A2D36", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "location": { + "startLine": 659, + "startColumn": 4, + "endLine": 659, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWB7E252D3", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableBE8A6027", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1Subnet8BCA10E0", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2DefaultRouteF4F5CFD2", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2RouteTable0A19E10E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2RouteTableAssociation0C73D413", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet2SubnetCFCDAA7A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1DefaultRoute91CEF279", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1EIP6AD938E8", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1NATGatewayE0556630", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableFEE4B781", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1SubnetB4246D30", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2DefaultRouteB7481BBA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2EIP4947BC00", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2NATGateway3C070193", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTable6F1A15F1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2RouteTableAssociation5A808732", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet2Subnet74179F39", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW99B986DC", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -123800,7 +151556,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 10, "debug": 0 }, @@ -123829,6 +151585,190 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF: No Metadata.com.aws.cloudformation.Context block found.; RequestFunction0B9B463A: No Metadata.com.aws.cloudformation.Context block found.; ResponseFunctionB78A69CA: No Metadata.com.aws.cloudformation.Context block found.; SiteDistribution3FF9535D: No Metadata.com.aws.cloudformation.Context block found.; SiteDistributionOrigin1S3Origin8B65D95B: No Metadata.com.aws.cloudformation.Context block found.; WebsiteBucket75C24D94: No Metadata.com.aws.cloudformation.Context block found.; WebsiteBucketPolicyE10E3262: No Metadata.com.aws.cloudformation.Context block found.; WebsiteFilesAwsCliLayerE117CD16: No Metadata.com.aws.cloudformation.Context block found.; WebsiteFilesCustomResourceF805158E: No Metadata.com.aws.cloudformation.Context block found.; cloudfrontOAID153E53B: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 367, + "startColumn": 4, + "endLine": 367, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 233, + "startColumn": 4, + "endLine": 233, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 330, + "startColumn": 4, + "endLine": 330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RequestFunction0B9B463A", + "resourceType": "AWS::CloudFront::Function" + }, + "location": { + "startLine": 396, + "startColumn": 4, + "endLine": 396, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ResponseFunctionB78A69CA", + "resourceType": "AWS::CloudFront::Function" + }, + "location": { + "startLine": 411, + "startColumn": 4, + "endLine": 411, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SiteDistribution3FF9535D", + "resourceType": "AWS::CloudFront::Distribution" + }, + "location": { + "startLine": 496, + "startColumn": 4, + "endLine": 496, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SiteDistributionOrigin1S3Origin8B65D95B", + "resourceType": "AWS::CloudFront::CloudFrontOriginAccessIdentity" + }, + "location": { + "startLine": 422, + "startColumn": 4, + "endLine": 422, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebsiteBucket75C24D94", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebsiteBucketPolicyE10E3262", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 147, + "startColumn": 4, + "endLine": 147, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebsiteFilesAwsCliLayerE117CD16", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "location": { + "startLine": 162, + "startColumn": 4, + "endLine": 162, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebsiteFilesCustomResourceF805158E", + "resourceType": "Custom::CDKBucketDeployment" + }, + "location": { + "startLine": 199, + "startColumn": 4, + "endLine": 199, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cloudfrontOAID153E53B", + "resourceType": "AWS::CloudFront::CloudFrontOriginAccessIdentity" + }, + "location": { + "startLine": 381, + "startColumn": 4, + "endLine": 381, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -124053,7 +151993,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 112, "debug": 0 }, @@ -124145,6 +152085,957 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (71 resource(s)): BlueTargetGroupF108EB01: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipeline5EEC284B: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineArtifactsBucket5D4A76C1: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineArtifactsBucketPolicyC49383E9: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRoleDefaultPolicy31694614: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRoleDefaultPolicy5E7BE922: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineEventsRoleDE5B0F8F: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineEventsRoleDefaultPolicy849508FE: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineRole3223E55F: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineRoleDefaultPolicyECF964D2: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleDefaultPolicy773D6739: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineTestJestCDKCodePipelineActionRoleDefaultPolicy15BF304F: No Metadata.com.aws.cloudformation.Context block found.; BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1: No Metadata.com.aws.cloudformation.Context block found.; BuildImage74257FD8: No Metadata.com.aws.cloudformation.Context block found.; BuildImageRoleA9C72406: No Metadata.com.aws.cloudformation.Context block found.; BuildImageRoleDefaultPolicy8FF7A310: No Metadata.com.aws.cloudformation.Context block found.; BuildLambda72E2A667: No Metadata.com.aws.cloudformation.Context block found.; BuildLambdaServiceRole8FB6C033: No Metadata.com.aws.cloudformation.Context block found.; BuildLambdaServiceRoleDefaultPolicyB9720C71: No Metadata.com.aws.cloudformation.Context block found.; BuildLambdaTriggerB4D1B83F: No Metadata.com.aws.cloudformation.Context block found.; BuildLambdaTriggerCustomResourcePolicy465CA35F: No Metadata.com.aws.cloudformation.Context block found.; BuildTestC9659529: No Metadata.com.aws.cloudformation.Context block found.; BuildTestRoleC332A422: No Metadata.com.aws.cloudformation.Context block found.; BuildTestRoleDefaultPolicyA34B30B3: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcA8CFF6E7: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcIGW467AA2AB: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet1DefaultRoute6BD16184: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet1RouteTable4D91A516: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet1Subnet505E4257: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet2DefaultRouteCC18893B: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet2RouteTable918A9411: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet2RouteTableAssociation994802D2: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPrivateSubnet2Subnet176BE39E: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1DefaultRouteAFF78CE0: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1EIP37B290BD: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1NATGateway69FA9C06: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1RouteTableA4D922A0: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet1Subnet6F292256: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2EIP299AF9FE: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2NATGatewayC9242BCE: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2RouteTable12CC8384: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcPublicSubnet2Subnet426701E5: No Metadata.com.aws.cloudformation.Context block found.; ClusterVpcVPCGW361426E5: No Metadata.com.aws.cloudformation.Context block found.; CodeDeployGroup58220FC8: No Metadata.com.aws.cloudformation.Context block found.; CodeDeployGroupApplication13EFBDA6: No Metadata.com.aws.cloudformation.Context block found.; CodeDeployGroupServiceRole50553EBF: No Metadata.com.aws.cloudformation.Context block found.; EcsCluster72B17558: No Metadata.com.aws.cloudformation.Context block found.; EcsCluster97242B84: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceAC2B3B85: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceSecurityGroup0A0E79CB: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefC6FB60B4: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefExecutionRole272677A9: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefExecutionRoleDefaultPolicy6D29E918: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefTaskRole0B257552: No Metadata.com.aws.cloudformation.Context block found.; GreenTargetGroupEEB2DF3E: No Metadata.com.aws.cloudformation.Context block found.; PublicAlb84330974: No Metadata.com.aws.cloudformation.Context block found.; PublicAlbAlbListener804C1B2779: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroupDD263621: No Metadata.com.aws.cloudformation.Context block found.; imageRepo1D8A68AF: No Metadata.com.aws.cloudformation.Context block found.; repoBEC318EA: No Metadata.com.aws.cloudformation.Context block found.; repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BlueTargetGroupF108EB01", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 1655, + "startColumn": 4, + "endLine": 1655, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BuildDeployPipeline5EEC284B", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "location": { + "startLine": 2465, + "startColumn": 4, + "endLine": 2465, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineArtifactsBucket5D4A76C1", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 2115, + "startColumn": 4, + "endLine": 2115, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineArtifactsBucketEncryptionKey8AB5ABF8", + "resourceType": "AWS::KMS::Key" + }, + "location": { + "startLine": 2067, + "startColumn": 4, + "endLine": 2067, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineArtifactsBucketEncryptionKeyAliasC52C67EF", + "resourceType": "AWS::KMS::Alias" + }, + "location": { + "startLine": 2084, + "startColumn": 4, + "endLine": 2084, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineArtifactsBucketPolicyC49383E9", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 2165, + "startColumn": 4, + "endLine": 2165, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRole760EF965", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2727, + "startColumn": 4, + "endLine": 2727, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineBuildDockerBuildPushCodePipelineActionRoleDefaultPolicy31694614", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2760, + "startColumn": 4, + "endLine": 2760, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRole054540AB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2785, + "startColumn": 4, + "endLine": 2785, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineDeployEcsFargateDeployCodePipelineActionRoleDefaultPolicy5E7BE922", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2953, + "startColumn": 4, + "endLine": 2953, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineEventsRoleDE5B0F8F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2598, + "startColumn": 4, + "endLine": 2598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineEventsRoleDefaultPolicy849508FE", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2644, + "startColumn": 4, + "endLine": 2644, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineRole3223E55F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2185, + "startColumn": 4, + "endLine": 2185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineRoleDefaultPolicyECF964D2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2287, + "startColumn": 4, + "endLine": 2287, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleB9EB8BA0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2490, + "startColumn": 4, + "endLine": 2490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineSourceAppCodeCommitCodePipelineActionRoleDefaultPolicy773D6739", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2578, + "startColumn": 4, + "endLine": 2578, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleDefaultPolicy15BF304F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 2702, + "startColumn": 4, + "endLine": 2702, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildDeployPipelineTestJestCDKCodePipelineActionRoleFA2BA8B1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2669, + "startColumn": 4, + "endLine": 2669, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildImage74257FD8", + "resourceType": "AWS::CodeBuild::Project" + }, + "location": { + "startLine": 621, + "startColumn": 4, + "endLine": 621, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildImageRoleA9C72406", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 279, + "startColumn": 4, + "endLine": 279, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildImageRoleDefaultPolicy8FF7A310", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 475, + "startColumn": 4, + "endLine": 475, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildLambda72E2A667", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 950, + "startColumn": 4, + "endLine": 950, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildLambdaServiceRole8FB6C033", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 884, + "startColumn": 4, + "endLine": 884, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildLambdaServiceRoleDefaultPolicyB9720C71", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 913, + "startColumn": 4, + "endLine": 913, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildLambdaTriggerB4D1B83F", + "resourceType": "Custom::AWS" + }, + "location": { + "startLine": 997, + "startColumn": 4, + "endLine": 997, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildLambdaTriggerCustomResourcePolicy465CA35F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1026, + "startColumn": 4, + "endLine": 1026, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildTestC9659529", + "resourceType": "AWS::CodeBuild::Project" + }, + "location": { + "startLine": 850, + "startColumn": 4, + "endLine": 850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildTestRoleC332A422", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 641, + "startColumn": 4, + "endLine": 641, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BuildTestRoleDefaultPolicyA34B30B3", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 807, + "startColumn": 4, + "endLine": 807, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcA8CFF6E7", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 1112, + "startColumn": 4, + "endLine": 1112, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcIGW467AA2AB", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 1616, + "startColumn": 4, + "endLine": 1616, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet1DefaultRoute6BD16184", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1501, + "startColumn": 4, + "endLine": 1501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet1RouteTable4D91A516", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1464, + "startColumn": 4, + "endLine": 1464, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet1RouteTableAssociationB0545C4C", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1482, + "startColumn": 4, + "endLine": 1482, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet1Subnet505E4257", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 1443, + "startColumn": 4, + "endLine": 1443, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet2DefaultRouteCC18893B", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1598, + "startColumn": 4, + "endLine": 1598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet2RouteTable918A9411", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1561, + "startColumn": 4, + "endLine": 1561, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet2RouteTableAssociation994802D2", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1579, + "startColumn": 4, + "endLine": 1579, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPrivateSubnet2Subnet176BE39E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 1540, + "startColumn": 4, + "endLine": 1540, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1DefaultRouteAFF78CE0", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1210, + "startColumn": 4, + "endLine": 1210, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1EIP37B290BD", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1229, + "startColumn": 4, + "endLine": 1229, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1NATGateway69FA9C06", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1258, + "startColumn": 4, + "endLine": 1258, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1RouteTableA4D922A0", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1172, + "startColumn": 4, + "endLine": 1172, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1RouteTableAssociation5AD6D21B", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1190, + "startColumn": 4, + "endLine": 1190, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet1Subnet6F292256", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 1151, + "startColumn": 4, + "endLine": 1151, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2DefaultRouteAEC6FDD4", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1356, + "startColumn": 4, + "endLine": 1356, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2EIP299AF9FE", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1375, + "startColumn": 4, + "endLine": 1375, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2NATGatewayC9242BCE", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1404, + "startColumn": 4, + "endLine": 1404, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2RouteTable12CC8384", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1318, + "startColumn": 4, + "endLine": 1318, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2RouteTableAssociation7ADD1D72", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1336, + "startColumn": 4, + "endLine": 1336, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcPublicSubnet2Subnet426701E5", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 1297, + "startColumn": 4, + "endLine": 1297, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterVpcVPCGW361426E5", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 1634, + "startColumn": 4, + "endLine": 1634, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeDeployGroup58220FC8", + "resourceType": "AWS::CodeDeploy::DeploymentGroup" + }, + "location": { + "startLine": 2029, + "startColumn": 4, + "endLine": 2029, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeDeployGroupApplication13EFBDA6", + "resourceType": "AWS::CodeDeploy::Application" + }, + "location": { + "startLine": 1944, + "startColumn": 4, + "endLine": 1944, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeDeployGroupServiceRole50553EBF", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1935, + "startColumn": 4, + "endLine": 1935, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsCluster72B17558", + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + }, + "location": { + "startLine": 1785, + "startColumn": 4, + "endLine": 1785, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsCluster97242B84", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 1769, + "startColumn": 4, + "endLine": 1769, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceAC2B3B85", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 1846, + "startColumn": 4, + "endLine": 1846, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceSecurityGroup0A0E79CB", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1871, + "startColumn": 4, + "endLine": 1871, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceSecurityGroupfromCodepipelineBuildDeployStackSecurityGroup07B96CA880690A9743", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 1901, + "startColumn": 4, + "endLine": 1901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefC6FB60B4", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 201, + "startColumn": 4, + "endLine": 201, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefExecutionRole272677A9", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 221, + "startColumn": 4, + "endLine": 221, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefExecutionRoleDefaultPolicy6D29E918", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 259, + "startColumn": 4, + "endLine": 259, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefTaskRole0B257552", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 113, + "startColumn": 4, + "endLine": 113, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GreenTargetGroupEEB2DF3E", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 1676, + "startColumn": 4, + "endLine": 1676, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicAlb84330974", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 1742, + "startColumn": 4, + "endLine": 1742, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicAlbAlbListener804C1B2779", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 1763, + "startColumn": 4, + "endLine": 1763, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroupDD263621", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1704, + "startColumn": 4, + "endLine": 1704, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "imageRepo1D8A68AF", + "resourceType": "AWS::ECR::Repository" + }, + "location": { + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "repoBEC318EA", + "resourceType": "AWS::CodeCommit::Repository" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "repoCodepipelineBuildDeployStackBuildDeployPipeline2B279CCCmainEventRule3F24D1E0", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -126659,7 +155550,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 23, "debug": 0 }, @@ -126711,6 +155602,203 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): cfnAuth: No Metadata.com.aws.cloudformation.Context block found.; helloWorldFunction00C940B5: No Metadata.com.aws.cloudformation.Context block found.; helloWorldFunctionServiceRole8475DBF0: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApi6825FB98: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiAccount3D66EADA: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiCloudWatchRole22367FBD: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiDeploymentStageprod67DD79AF: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiHELLOAD091B67: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiHELLOGET6E88F46C: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B: No Metadata.com.aws.cloudformation.Context block found.; helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF: No Metadata.com.aws.cloudformation.Context block found.; userPoolDC9497E0: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "cfnAuth", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 370, + "startColumn": 4, + "endLine": 370, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "helloWorldFunction00C940B5", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldFunctionServiceRole8475DBF0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApi6825FB98", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 70, + "startColumn": 4, + "endLine": 70, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiAccount3D66EADA", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 125, + "startColumn": 4, + "endLine": 125, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiCloudWatchRole22367FBD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 106, + "startColumn": 4, + "endLine": 106, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiDeploymentCB1FF57464f3e9f368e40968a1aeabdb5bcc9580", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiDeploymentStageprod67DD79AF", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 160, + "startColumn": 4, + "endLine": 160, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiHELLOAD091B67", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiHELLOGET6E88F46C", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 308, + "startColumn": 4, + "endLine": 308, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiHELLOGETApiPermissionCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLO61B4977B", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 222, + "startColumn": 4, + "endLine": 222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "helloWorldLambdaRestApiHELLOGETApiPermissionTestCognitoProtectedApihelloWorldLambdaRestApi9E9DB39DGETHELLOD4AD0AEF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 262, + "startColumn": 4, + "endLine": 262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "userPoolDC9497E0", + "resourceType": "AWS::Cognito::UserPool" + }, + "location": { + "startLine": 348, + "startColumn": 4, + "endLine": 348, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -127239,7 +156327,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -127248,6 +156336,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyBucketF68F3FF0: No Metadata.com.aws.cloudformation.Context block found.; MyTopic86869434: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyBucketF68F3FF0", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "MyTopic86869434", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -127299,7 +156441,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 5, "debug": 0 }, @@ -127371,6 +156513,73 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DemoResource5B5C546C: No Metadata.com.aws.cloudformation.Context block found.; SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C: No Metadata.com.aws.cloudformation.Context block found.; SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DemoResource5B5C546C", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 150, + "startColumn": 4, + "endLine": 150, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 207, + "startColumn": 4, + "endLine": 207, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 184, + "startColumn": 4, + "endLine": 184, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -127485,7 +156694,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 3, + "warnings": 5, "informational": 7, "debug": 0 }, @@ -127577,6 +156786,73 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DemoResourceResource1DB79ECAB: No Metadata.com.aws.cloudformation.Context block found.; SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C: No Metadata.com.aws.cloudformation.Context block found.; SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DemoResourceResource1DB79ECAB", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 176, + "startColumn": 4, + "endLine": 176, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebc492C6E5C", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 233, + "startColumn": 4, + "endLine": 233, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonLambdaf7d4f7304ee111e89c2dfa7ae01bbebcServiceRoleFE9ABB04", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 210, + "startColumn": 4, + "endLine": 210, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -127731,7 +157007,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 20, "debug": 0 }, @@ -127826,6 +157102,229 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (15 resource(s)): ddbstreaml2dlq5966ED66: No Metadata.com.aws.cloudformation.Context block found.; ddbstreamtopic7821AF6E: No Metadata.com.aws.cloudformation.Context block found.; ddbstreamtopicPolicyF344141B: No Metadata.com.aws.cloudformation.Context block found.; itemL2TableBAC64D83: No Metadata.com.aws.cloudformation.Context block found.; itemL2TableLambdaFunction1987B4C5: No Metadata.com.aws.cloudformation.Context block found.; itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95: No Metadata.com.aws.cloudformation.Context block found.; itemL2TableLambdaFunctionServiceRole41583A05: No Metadata.com.aws.cloudformation.Context block found.; itemL2TableLambdaFunctionServiceRoleDefaultPolicy500DC1AA: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableDynamoTable6BC36F24: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableLambdaFunction7B818C58: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableLambdaFunctionServiceRoleBA21B37D: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableLambdaFunctionServiceRoleDefaultPolicy3297170E: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableSqsDlqQueueD3C251B9: No Metadata.com.aws.cloudformation.Context block found.; itemL3TableSqsDlqQueuePolicyD287DD28: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ddbstreaml2dlq5966ED66", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 74, + "startColumn": 4, + "endLine": 74, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ddbstreamtopic7821AF6E", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 29, + "startColumn": 4, + "endLine": 29, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ddbstreamtopicPolicyF344141B", + "resourceType": "AWS::SNS::TopicPolicy" + }, + "location": { + "startLine": 61, + "startColumn": 4, + "endLine": 61, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL2TableBAC64D83", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 103, + "startColumn": 4, + "endLine": 103, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL2TableLambdaFunction1987B4C5", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 237, + "startColumn": 4, + "endLine": 237, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL2TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL2Table0234427734A22B95", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 272, + "startColumn": 4, + "endLine": 272, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL2TableLambdaFunctionServiceRole41583A05", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL2TableLambdaFunctionServiceRoleDefaultPolicy500DC1AA", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 200, + "startColumn": 4, + "endLine": 200, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableDynamoTable6BC36F24", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 525, + "startColumn": 4, + "endLine": 525, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableLambdaFunction7B818C58", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 442, + "startColumn": 4, + "endLine": 442, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableLambdaFunctionDynamoDBEventSourceDdbStreamStackitemL3TableDynamoTableF17D6710E0C1078B", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 493, + "startColumn": 4, + "endLine": 493, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableLambdaFunctionServiceRoleBA21B37D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 330, + "startColumn": 4, + "endLine": 330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableLambdaFunctionServiceRoleDefaultPolicy3297170E", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 398, + "startColumn": 4, + "endLine": 398, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableSqsDlqQueueD3C251B9", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 541, + "startColumn": 4, + "endLine": 541, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "itemL3TableSqsDlqQueuePolicyD287DD28", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 615, + "startColumn": 4, + "endLine": 615, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -128256,7 +157755,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 40, "debug": 0 }, @@ -128365,6 +157864,359 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (25 resource(s)): CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleDefaultPolicy96C3E726: No Metadata.com.aws.cloudformation.Context block found.; EC2Instance1F00751C57ee729c1274d778: No Metadata.com.aws.cloudformation.Context block found.; EC2InstanceInstanceProfile2CAA3051: No Metadata.com.aws.cloudformation.Context block found.; EC2assetBucketAutoDeleteObjectsCustomResource48CBA772: No Metadata.com.aws.cloudformation.Context block found.; EC2assetBucketC584B4AB: No Metadata.com.aws.cloudformation.Context block found.; EC2assetBucketDeploymentAwsCliLayerFF55632D: No Metadata.com.aws.cloudformation.Context block found.; EC2assetBucketDeploymentCustomResource512MiB0663CD81: No Metadata.com.aws.cloudformation.Context block found.; EC2assetBucketPolicy31C0B372: No Metadata.com.aws.cloudformation.Context block found.; EC2ec2InstanceSecurityGroupD268D496: No Metadata.com.aws.cloudformation.Context block found.; EC2serverEc2Role6775A3D4: No Metadata.com.aws.cloudformation.Context block found.; EC2serverEc2RoleDefaultPolicy34EE5F1D: No Metadata.com.aws.cloudformation.Context block found.; VPC61AD6880: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWE1DD60CF: No Metadata.com.aws.cloudformation.Context block found.; VPCSSHSecurityGroup0495A24F: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet1DefaultRoute0DEC8857: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet1RouteTable140320E2: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet1RouteTableAssociationBCA9EE21: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet1SubnetF3987995: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet2DefaultRoute6A434666: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet2RouteTableAssociationE261CDCA: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet2RouteTableD6971BF3: No Metadata.com.aws.cloudformation.Context block found.; VPCServerPublicSubnet2SubnetDB508B90: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW3AFA48F6: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiB6723FB92", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 943, + "startColumn": 4, + "endLine": 943, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleBA21DBC1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 816, + "startColumn": 4, + "endLine": 816, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C512MiBServiceRoleDefaultPolicy96C3E726", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 905, + "startColumn": 4, + "endLine": 905, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2Instance1F00751C57ee729c1274d778", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 668, + "startColumn": 4, + "endLine": 668, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2InstanceInstanceProfile2CAA3051", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 558, + "startColumn": 4, + "endLine": 558, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2assetBucketAutoDeleteObjectsCustomResource48CBA772", + "resourceType": "Custom::S3AutoDeleteObjects" + }, + "location": { + "startLine": 346, + "startColumn": 4, + "endLine": 346, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2assetBucketC584B4AB", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2assetBucketDeploymentAwsCliLayerFF55632D", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "location": { + "startLine": 361, + "startColumn": 4, + "endLine": 361, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2assetBucketDeploymentCustomResource512MiB0663CD81", + "resourceType": "Custom::CDKBucketDeployment" + }, + "location": { + "startLine": 399, + "startColumn": 4, + "endLine": 399, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2assetBucketPolicy31C0B372", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 324, + "startColumn": 4, + "endLine": 324, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2ec2InstanceSecurityGroupD268D496", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 545, + "startColumn": 4, + "endLine": 545, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2serverEc2Role6775A3D4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 460, + "startColumn": 4, + "endLine": 460, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2serverEc2RoleDefaultPolicy34EE5F1D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 526, + "startColumn": 4, + "endLine": 526, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC61AD6880", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 18, + "startColumn": 4, + "endLine": 18, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWE1DD60CF", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 200, + "startColumn": 4, + "endLine": 200, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCSSHSecurityGroup0495A24F", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet1DefaultRoute0DEC8857", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 102, + "startColumn": 4, + "endLine": 102, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet1RouteTable140320E2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 70, + "startColumn": 4, + "endLine": 70, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet1RouteTableAssociationBCA9EE21", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 84, + "startColumn": 4, + "endLine": 84, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet1SubnetF3987995", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 53, + "startColumn": 4, + "endLine": 53, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet2DefaultRoute6A434666", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 186, + "startColumn": 4, + "endLine": 186, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet2RouteTableAssociationE261CDCA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 168, + "startColumn": 4, + "endLine": 168, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet2RouteTableD6971BF3", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 154, + "startColumn": 4, + "endLine": 154, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCServerPublicSubnet2SubnetDB508B90", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW3AFA48F6", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 214, + "startColumn": 4, + "endLine": 214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -129279,7 +159131,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 8, + "warnings": 10, "informational": 34, "debug": 0 }, @@ -129454,6 +159306,242 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (16 resource(s)): EICEndpointEICEndpointResourceBED54177: No Metadata.com.aws.cloudformation.Context block found.; EICEndpointRole7DC4D43E: No Metadata.com.aws.cloudformation.Context block found.; EICEndpointRoleDefaultPolicy9C78FE54: No Metadata.com.aws.cloudformation.Context block found.; EICEndpointisCompleteHandler0273707A: No Metadata.com.aws.cloudformation.Context block found.; EICEndpointonEventHandlerC2E1F5F2: No Metadata.com.aws.cloudformation.Context block found.; Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet1RouteTableAssociationE01668F2: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet1RouteTableE62E4ED6: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet1SubnetC2926CEA: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet2RouteTable3E531D9B: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet2RouteTableAssociation25A7BD68: No Metadata.com.aws.cloudformation.Context block found.; VpcrdsSubnet2Subnet70A835C8: No Metadata.com.aws.cloudformation.Context block found.; instanceB7CCE687: No Metadata.com.aws.cloudformation.Context block found.; instanceInstanceProfile931F14E3: No Metadata.com.aws.cloudformation.Context block found.; instanceInstanceRoleF436EE92: No Metadata.com.aws.cloudformation.Context block found.; instanceInstanceSecurityGroup725C795D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EICEndpointEICEndpointResourceBED54177", + "entityType": "Resource", + "resourceType": "Custom::EC2InstanceConnectEndpoint" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 1106, + "startColumn": 4, + "endLine": 1106, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EICEndpointRole7DC4D43E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 305, + "startColumn": 4, + "endLine": 305, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EICEndpointRoleDefaultPolicy9C78FE54", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 391, + "startColumn": 4, + "endLine": 391, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EICEndpointisCompleteHandler0273707A", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 447, + "startColumn": 4, + "endLine": 447, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EICEndpointonEventHandlerC2E1F5F2", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 419, + "startColumn": 4, + "endLine": 419, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc8378EB38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet1RouteTableAssociationE01668F2", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet1RouteTableE62E4ED6", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet1SubnetC2926CEA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet2RouteTable3E531D9B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 135, + "startColumn": 4, + "endLine": 135, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet2RouteTableAssociation25A7BD68", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 149, + "startColumn": 4, + "endLine": 149, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcrdsSubnet2Subnet70A835C8", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 118, + "startColumn": 4, + "endLine": 118, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "instanceB7CCE687", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 285, + "startColumn": 4, + "endLine": 285, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "instanceInstanceProfile931F14E3", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 239, + "startColumn": 4, + "endLine": 239, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "instanceInstanceRoleF436EE92", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 226, + "startColumn": 4, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "instanceInstanceSecurityGroup725C795D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 200, + "startColumn": 4, + "endLine": 200, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -130212,7 +160300,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 52, "debug": 0 }, @@ -130240,6 +160328,437 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (31 resource(s)): EcsCluster72B17558: No Metadata.com.aws.cloudformation.Context block found.; EcsCluster97242B84: No Metadata.com.aws.cloudformation.Context block found.; MyFleetASG88E55886: No Metadata.com.aws.cloudformation.Context block found.; MyFleetInstanceProfile70A58496: No Metadata.com.aws.cloudformation.Context block found.; MyFleetInstanceRole25A84AB8: No Metadata.com.aws.cloudformation.Context block found.; MyFleetInstanceRoleDefaultPolicy7B0197E7: No Metadata.com.aws.cloudformation.Context block found.; MyFleetInstanceSecurityGroup774E8234: No Metadata.com.aws.cloudformation.Context block found.; MyFleetLaunchConfig5D7F9801: No Metadata.com.aws.cloudformation.Context block found.; MyVpcF9F0CA6F: No Metadata.com.aws.cloudformation.Context block found.; MyVpcIGW5C4A4F63: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1DefaultRouteA8CDE2FA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTable8819E6E2: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTableAssociation56D38C7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1Subnet5057CF7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2DefaultRoute9CE96294: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableAssociation86A610DA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableCEDCEECE: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2Subnet0040C983: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1DefaultRoute95FDF9EB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1EIP096967CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1NATGatewayAD3400C1: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableC46AB2F4: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1SubnetF6608456: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2DefaultRoute052936F6: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2EIP8CCBA239: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2NATGateway91BFBEC9: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTable1DF17386: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTableAssociation227DE78D: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2Subnet492B6BFB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcVPCGW488ACE0D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EcsCluster72B17558", + "entityType": "Resource", + "resourceType": "AWS::ECS::ClusterCapacityProviderAssociations" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 683, + "startColumn": 4, + "endLine": 683, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EcsCluster97242B84", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 666, + "startColumn": 4, + "endLine": 666, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetASG88E55886", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 660, + "startColumn": 4, + "endLine": 660, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetInstanceProfile70A58496", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 584, + "startColumn": 4, + "endLine": 584, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetInstanceRole25A84AB8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 510, + "startColumn": 4, + "endLine": 510, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetInstanceRoleDefaultPolicy7B0197E7", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 571, + "startColumn": 4, + "endLine": 571, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetInstanceSecurityGroup774E8234", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 484, + "startColumn": 4, + "endLine": 484, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFleetLaunchConfig5D7F9801", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 625, + "startColumn": 4, + "endLine": 625, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcF9F0CA6F", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcIGW5C4A4F63", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1Subnet5057CF7E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2Subnet0040C983", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1EIP096967CB", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1SubnetF6608456", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2DefaultRoute052936F6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2EIP8CCBA239", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTable1DF17386", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2Subnet492B6BFB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcVPCGW488ACE0D", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -131475,7 +161994,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 40, "debug": 0 }, @@ -131484,6 +162003,346 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (24 resource(s)): ClusterEB0386A7: No Metadata.com.aws.cloudformation.Context block found.; Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterEB0386A7", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Vpc8378EB38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -132446,7 +163305,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -132455,6 +163314,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LoadBalancerBE9EEC3A: No Metadata.com.aws.cloudformation.Context block found.; LoadBalancerSecurityGroupA28D6DD7: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LoadBalancerBE9EEC3A", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "LoadBalancerSecurityGroupA28D6DD7", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -132597,7 +163510,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 32, "debug": 0 }, @@ -132626,6 +163539,138 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): Listener828B0E81: No Metadata.com.aws.cloudformation.Context block found.; ListenerECSGroup2EA4A011: No Metadata.com.aws.cloudformation.Context block found.; ServiceD69D759B: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupC96ED6A7: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D: No Metadata.com.aws.cloudformation.Context block found.; TaskDef54694570: No Metadata.com.aws.cloudformation.Context block found.; TaskDefTaskRole1EDB4A67: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Listener828B0E81", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 206, + "startColumn": 4, + "endLine": 206, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ListenerECSGroup2EA4A011", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 226, + "startColumn": 4, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceD69D759B", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 115, + "startColumn": 4, + "endLine": 115, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceSecurityGroupC96ED6A7", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceSecurityGroupSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680from5771F1D9", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceSecurityGroupfromSplitAtListenerLBStackLoadBalancerSecurityGroup4A27809680251D8C7D", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 161, + "startColumn": 4, + "endLine": 161, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef54694570", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 54, + "startColumn": 4, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDefTaskRole1EDB4A67", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 19, + "startColumn": 4, + "endLine": 19, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -133356,7 +164401,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 13, "debug": 0 }, @@ -133365,6 +164410,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): LoadBalancerBE9EEC3A: No Metadata.com.aws.cloudformation.Context block found.; LoadBalancerListenerE1A099B9: No Metadata.com.aws.cloudformation.Context block found.; LoadBalancerSecurityGroupA28D6DD7: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup3D7CD9B8: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LoadBalancerBE9EEC3A", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "LoadBalancerListenerE1A099B9", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 73, + "startColumn": 4, + "endLine": 73, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoadBalancerSecurityGroupA28D6DD7", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TargetGroup3D7CD9B8", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 93, + "startColumn": 4, + "endLine": 93, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -133660,7 +164785,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 25, "debug": 0 }, @@ -133669,6 +164794,112 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): ServiceD69D759B: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupC96ED6A7: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07: No Metadata.com.aws.cloudformation.Context block found.; ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485: No Metadata.com.aws.cloudformation.Context block found.; TaskDef54694570: No Metadata.com.aws.cloudformation.Context block found.; TaskDefTaskRole1EDB4A67: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ServiceD69D759B", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 113, + "startColumn": 4, + "endLine": 113, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ServiceSecurityGroupC96ED6A7", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 135, + "startColumn": 4, + "endLine": 135, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceSecurityGroupSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580from6A874A07", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "location": { + "startLine": 183, + "startColumn": 4, + "endLine": 183, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceSecurityGroupfromSplitAtTargetGroupLBStackLoadBalancerSecurityGroupAC48AF9580953EC485", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 159, + "startColumn": 4, + "endLine": 159, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef54694570", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 54, + "startColumn": 4, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDefTaskRole1EDB4A67", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 19, + "startColumn": 4, + "endLine": 19, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -134246,7 +165477,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 71, "debug": 0 }, @@ -134314,6 +165545,619 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (45 resource(s)): Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterEE43E89D: No Metadata.com.aws.cloudformation.Context block found.; Ec2Service04A33183: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionAppContainerLogGroupA24DD1B6: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionExecutionRole3D88C23D: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionExecutionRoleDefaultPolicy17975C1F: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionF5B350B4: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionTaskRole93FBB305: No Metadata.com.aws.cloudformation.Context block found.; MyVpcF9F0CA6F: No Metadata.com.aws.cloudformation.Context block found.; MyVpcIGW5C4A4F63: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1DefaultRouteA8CDE2FA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTable8819E6E2: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTableAssociation56D38C7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1Subnet5057CF7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2DefaultRoute9CE96294: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableAssociation86A610DA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableCEDCEECE: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2Subnet0040C983: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1DefaultRoute95FDF9EB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1EIP096967CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1NATGatewayAD3400C1: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableC46AB2F4: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1SubnetF6608456: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2DefaultRoute052936F6: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2EIP8CCBA239: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2NATGateway91BFBEC9: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTable1DF17386: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTableAssociation227DE78D: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2Subnet492B6BFB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcVPCGW488ACE0D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2ClusterDefaultAutoScalingGroupASGC5A6D4C0", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 667, + "startColumn": 4, + "endLine": 667, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeWillkommenEc2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic5835279F94354ECC", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 869, + "startColumn": 4, + "endLine": 869, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionE0DEFB31", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 850, + "startColumn": 4, + "endLine": 850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole23116FA3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 707, + "startColumn": 4, + "endLine": 707, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy638C9E33", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 813, + "startColumn": 4, + "endLine": 813, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic4795E0F6", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 887, + "startColumn": 4, + "endLine": 887, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupInstanceProfileDB232471", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 590, + "startColumn": 4, + "endLine": 590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupInstanceRole73D80898", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy6D2DC2FD", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 577, + "startColumn": 4, + "endLine": 577, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupInstanceSecurityGroup149B0A9E", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 490, + "startColumn": 4, + "endLine": 490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupLaunchConfig7B2FED3A", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 631, + "startColumn": 4, + "endLine": 631, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHook5CB1467E", + "resourceType": "AWS::AutoScaling::LifecycleHook" + }, + "location": { + "startLine": 980, + "startColumn": 4, + "endLine": 980, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRole71045ED7", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 927, + "startColumn": 4, + "endLine": 927, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicyE499974B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 953, + "startColumn": 4, + "endLine": 953, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicF7263B30", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 901, + "startColumn": 4, + "endLine": 901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterEE43E89D", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2Service04A33183", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 1134, + "startColumn": 4, + "endLine": 1134, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 1053, + "startColumn": 4, + "endLine": 1053, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionExecutionRole3D88C23D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1073, + "startColumn": 4, + "endLine": 1073, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionExecutionRoleDefaultPolicy17975C1F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1105, + "startColumn": 4, + "endLine": 1105, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionF5B350B4", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 1045, + "startColumn": 4, + "endLine": 1045, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionTaskRole93FBB305", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1000, + "startColumn": 4, + "endLine": 1000, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcF9F0CA6F", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcIGW5C4A4F63", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1Subnet5057CF7E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2Subnet0040C983", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1EIP096967CB", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1SubnetF6608456", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2DefaultRoute052936F6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2EIP8CCBA239", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTable1DF17386", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2Subnet492B6BFB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcVPCGW488ACE0D", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -135975,7 +167819,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 71, "debug": 0 }, @@ -136043,6 +167887,593 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (43 resource(s)): Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterA7FD8C86: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy44190D0C: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceRoleB36FE662: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy63242A56: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicy8468BE7A: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C: No Metadata.com.aws.cloudformation.Context block found.; awsvpcecsdemoserviceServiceFC4BE5C7: No Metadata.com.aws.cloudformation.Context block found.; nginx76230F353007: No Metadata.com.aws.cloudformation.Context block found.; nginxawspvcB396AC00: No Metadata.com.aws.cloudformation.Context block found.; nginxawspvcTaskRole3F43A26E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc8378EB38", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterA7FD8C86", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupASG7F29632B", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 667, + "startColumn": 4, + "endLine": 667, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokeec2servicewithtasknetworkingawsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic582DD4BEABB08B98", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 869, + "startColumn": 4, + "endLine": 869, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionC919C385", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 850, + "startColumn": 4, + "endLine": 850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleBC3C9F69", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 707, + "startColumn": 4, + "endLine": 707, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicy44190D0C", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 813, + "startColumn": 4, + "endLine": 813, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupDrainECSHookFunctionTopicF27EF507", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 887, + "startColumn": 4, + "endLine": 887, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceProfileF3361609", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 590, + "startColumn": 4, + "endLine": 590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceRoleB36FE662", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy63242A56", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 577, + "startColumn": 4, + "endLine": 577, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupInstanceSecurityGroupFF91CD80", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 490, + "startColumn": 4, + "endLine": 490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupLaunchConfig067B11BF", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 631, + "startColumn": 4, + "endLine": 631, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHook4D2DB763", + "resourceType": "AWS::AutoScaling::LifecycleHook" + }, + "location": { + "startLine": 980, + "startColumn": 4, + "endLine": 980, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleD0498D9C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 927, + "startColumn": 4, + "endLine": 927, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicy8468BE7A", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 953, + "startColumn": 4, + "endLine": 953, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoclusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic42EE7A5C", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 901, + "startColumn": 4, + "endLine": 901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "awsvpcecsdemoserviceServiceFC4BE5C7", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 1122, + "startColumn": 4, + "endLine": 1122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nginx76230F353007", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1072, + "startColumn": 4, + "endLine": 1072, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nginxawspvcB396AC00", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 1042, + "startColumn": 4, + "endLine": 1042, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "nginxawspvcTaskRole3F43A26E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1000, + "startColumn": 4, + "endLine": 1000, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -137705,7 +170136,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 68, "debug": 0 }, @@ -137773,6 +170204,580 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (42 resource(s)): EcsCluster97242B84: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupASGC1A785DB: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicyA45BF396: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupInstanceRole3C026863: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy04DC6C80: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicy75002F88: No Metadata.com.aws.cloudformation.Context block found.; EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4: No Metadata.com.aws.cloudformation.Context block found.; ServiceD69D759B: No Metadata.com.aws.cloudformation.Context block found.; TaskDef54694570: No Metadata.com.aws.cloudformation.Context block found.; TaskDefTaskRole1EDB4A67: No Metadata.com.aws.cloudformation.Context block found.; Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EcsCluster97242B84", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupASGC1A785DB", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 667, + "startColumn": 4, + "endLine": 667, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionAllowInvokesampleawsecsintegecsEcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopic7D0FA5A858D2FF02", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 869, + "startColumn": 4, + "endLine": 869, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionE17A5F5E", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 850, + "startColumn": 4, + "endLine": 850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRole94543EDA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 707, + "startColumn": 4, + "endLine": 707, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionServiceRoleDefaultPolicyA45BF396", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 813, + "startColumn": 4, + "endLine": 813, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupDrainECSHookFunctionTopic8F34E394", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 887, + "startColumn": 4, + "endLine": 887, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupInstanceProfile2CE606B3", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 590, + "startColumn": 4, + "endLine": 590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupInstanceRole3C026863", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupInstanceRoleDefaultPolicy04DC6C80", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 577, + "startColumn": 4, + "endLine": 577, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupInstanceSecurityGroup912E1231", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 490, + "startColumn": 4, + "endLine": 490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupLaunchConfigB7E376C1", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 631, + "startColumn": 4, + "endLine": 631, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookFFA63029", + "resourceType": "AWS::AutoScaling::LifecycleHook" + }, + "location": { + "startLine": 980, + "startColumn": 4, + "endLine": 980, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleA38EC83B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 927, + "startColumn": 4, + "endLine": 927, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookRoleDefaultPolicy75002F88", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 953, + "startColumn": 4, + "endLine": 953, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcsClusterDefaultAutoScalingGroupLifecycleHookDrainHookTopicACD2D4A4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 901, + "startColumn": 4, + "endLine": 901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceD69D759B", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 1078, + "startColumn": 4, + "endLine": 1078, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef54694570", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 1034, + "startColumn": 4, + "endLine": 1034, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDefTaskRole1EDB4A67", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1000, + "startColumn": 4, + "endLine": 1000, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc8378EB38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -139370,7 +172375,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 81, "debug": 0 }, @@ -139399,6 +172404,515 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (37 resource(s)): ClusterEB0386A7: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceECC8084D: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceLBB353E155: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceLBPublicListener4B4929CA: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceLBPublicListenerECSGroupBE57E081: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceLBSecurityGroup5F444C78: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceSecurityGroup262B61DD: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceTaskDef940E3A80: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceTaskDefExecutionRole9194820E: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceTaskDefExecutionRoleDefaultPolicy827E7CA2: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceTaskDefTaskRole8CDCF85E: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceTaskDefwebLogGroup71FAF541: No Metadata.com.aws.cloudformation.Context block found.; MyVpcF9F0CA6F: No Metadata.com.aws.cloudformation.Context block found.; MyVpcIGW5C4A4F63: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1DefaultRouteA8CDE2FA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTable8819E6E2: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTableAssociation56D38C7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1Subnet5057CF7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2DefaultRoute9CE96294: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableAssociation86A610DA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableCEDCEECE: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2Subnet0040C983: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1DefaultRoute95FDF9EB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1EIP096967CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1NATGatewayAD3400C1: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableC46AB2F4: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1SubnetF6608456: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2DefaultRoute052936F6: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2EIP8CCBA239: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2NATGateway91BFBEC9: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTable1DF17386: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTableAssociation227DE78D: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2Subnet492B6BFB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcVPCGW488ACE0D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterEB0386A7", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "FargateServiceECC8084D", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 782, + "startColumn": 4, + "endLine": 782, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceLBB353E155", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 503, + "startColumn": 4, + "endLine": 503, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceLBPublicListener4B4929CA", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 569, + "startColumn": 4, + "endLine": 569, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceLBPublicListenerECSGroupBE57E081", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 589, + "startColumn": 4, + "endLine": 589, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceLBSecurityGroup5F444C78", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 524, + "startColumn": 4, + "endLine": 524, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceLBSecurityGrouptoBonjourFargateServiceSecurityGroupB8A86CBA80181B6C73", + "resourceType": "AWS::EC2::SecurityGroupEgress" + }, + "location": { + "startLine": 548, + "startColumn": 4, + "endLine": 548, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceSecurityGroup262B61DD", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 804, + "startColumn": 4, + "endLine": 804, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceSecurityGroupfromBonjourFargateServiceLBSecurityGroup660CF9B080C7AA015A", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 831, + "startColumn": 4, + "endLine": 831, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceTaskDef940E3A80", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 661, + "startColumn": 4, + "endLine": 661, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceTaskDefExecutionRole9194820E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 689, + "startColumn": 4, + "endLine": 689, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceTaskDefExecutionRoleDefaultPolicy827E7CA2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 721, + "startColumn": 4, + "endLine": 721, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceTaskDefTaskRole8CDCF85E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 609, + "startColumn": 4, + "endLine": 609, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceTaskDefwebLogGroup71FAF541", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 669, + "startColumn": 4, + "endLine": 669, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcF9F0CA6F", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcIGW5C4A4F63", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1Subnet5057CF7E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2Subnet0040C983", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1EIP096967CB", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1SubnetF6608456", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2DefaultRoute052936F6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2EIP8CCBA239", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTable1DF17386", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2Subnet492B6BFB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcVPCGW488ACE0D", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -141275,7 +174789,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 73, "debug": 0 }, @@ -141304,6 +174818,502 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (36 resource(s)): Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.; fargateserviceautoscalingD107CF93: No Metadata.com.aws.cloudformation.Context block found.; sampleappLBBDE1D276: No Metadata.com.aws.cloudformation.Context block found.; sampleappLBPublicListenerC4DF6480: No Metadata.com.aws.cloudformation.Context block found.; sampleappLBPublicListenerECSGroup525A567D: No Metadata.com.aws.cloudformation.Context block found.; sampleappServiceE7504FDB: No Metadata.com.aws.cloudformation.Context block found.; sampleappServiceSecurityGroup0ABF0D21: No Metadata.com.aws.cloudformation.Context block found.; sampleappServiceTaskCountTargetCpuScalingF4452F80: No Metadata.com.aws.cloudformation.Context block found.; sampleappServiceTaskCountTargetE827DC30: No Metadata.com.aws.cloudformation.Context block found.; sampleappTaskDef6BF75736: No Metadata.com.aws.cloudformation.Context block found.; sampleappTaskDefExecutionRoleAD6F4C40: No Metadata.com.aws.cloudformation.Context block found.; sampleappTaskDefExecutionRoleDefaultPolicy0AD15374: No Metadata.com.aws.cloudformation.Context block found.; sampleappTaskDefTaskRoleB530CAC0: No Metadata.com.aws.cloudformation.Context block found.; sampleappTaskDefwebLogGroup34BE8C79: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Vpc8378EB38", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "fargateserviceautoscalingD107CF93", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappLBBDE1D276", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 495, + "startColumn": 4, + "endLine": 495, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappLBPublicListenerC4DF6480", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 516, + "startColumn": 4, + "endLine": 516, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappLBPublicListenerECSGroup525A567D", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 530, + "startColumn": 4, + "endLine": 530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappServiceE7504FDB", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 723, + "startColumn": 4, + "endLine": 723, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappServiceSecurityGroup0ABF0D21", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 745, + "startColumn": 4, + "endLine": 745, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappServiceTaskCountTargetCpuScalingF4452F80", + "resourceType": "AWS::ApplicationAutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 818, + "startColumn": 4, + "endLine": 818, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappServiceTaskCountTargetE827DC30", + "resourceType": "AWS::ApplicationAutoScaling::ScalableTarget" + }, + "location": { + "startLine": 794, + "startColumn": 4, + "endLine": 794, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappTaskDef6BF75736", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 602, + "startColumn": 4, + "endLine": 602, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappTaskDefExecutionRoleAD6F4C40", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 630, + "startColumn": 4, + "endLine": 630, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappTaskDefExecutionRoleDefaultPolicy0AD15374", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 662, + "startColumn": 4, + "endLine": 662, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappTaskDefTaskRoleB530CAC0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 550, + "startColumn": 4, + "endLine": 550, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sampleappTaskDefwebLogGroup34BE8C79", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 610, + "startColumn": 4, + "endLine": 610, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -142998,7 +177008,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 58, "debug": 0 }, @@ -143007,6 +177017,437 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (31 resource(s)): Ec2ClusterEE43E89D: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceAC2B3B85: No Metadata.com.aws.cloudformation.Context block found.; FargateServiceSecurityGroup0A0E79CB: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionAppContainerLogGroupA24DD1B6: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionExecutionRole3D88C23D: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionExecutionRoleDefaultPolicy17975C1F: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionF5B350B4: No Metadata.com.aws.cloudformation.Context block found.; MyTaskDefinitionTaskRole93FBB305: No Metadata.com.aws.cloudformation.Context block found.; MyVpcF9F0CA6F: No Metadata.com.aws.cloudformation.Context block found.; MyVpcIGW5C4A4F63: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1DefaultRouteA8CDE2FA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTable8819E6E2: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1RouteTableAssociation56D38C7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet1Subnet5057CF7E: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2DefaultRoute9CE96294: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableAssociation86A610DA: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2RouteTableCEDCEECE: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPrivateSubnet2Subnet0040C983: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1DefaultRoute95FDF9EB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1EIP096967CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1NATGatewayAD3400C1: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1RouteTableC46AB2F4: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet1SubnetF6608456: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2DefaultRoute052936F6: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2EIP8CCBA239: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2NATGateway91BFBEC9: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTable1DF17386: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2RouteTableAssociation227DE78D: No Metadata.com.aws.cloudformation.Context block found.; MyVpcPublicSubnet2Subnet492B6BFB: No Metadata.com.aws.cloudformation.Context block found.; MyVpcVPCGW488ACE0D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Ec2ClusterEE43E89D", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 465, + "startColumn": 4, + "endLine": 465, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "FargateServiceAC2B3B85", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 640, + "startColumn": 4, + "endLine": 640, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateServiceSecurityGroup0A0E79CB", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 662, + "startColumn": 4, + "endLine": 662, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionAppContainerLogGroupA24DD1B6", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 539, + "startColumn": 4, + "endLine": 539, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionExecutionRole3D88C23D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 559, + "startColumn": 4, + "endLine": 559, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionExecutionRoleDefaultPolicy17975C1F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 591, + "startColumn": 4, + "endLine": 591, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionF5B350B4", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 531, + "startColumn": 4, + "endLine": 531, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTaskDefinitionTaskRole93FBB305", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 485, + "startColumn": 4, + "endLine": 485, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcF9F0CA6F", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcIGW5C4A4F63", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1DefaultRouteA8CDE2FA", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTable8819E6E2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1RouteTableAssociation56D38C7E", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet1Subnet5057CF7E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2DefaultRoute9CE96294", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableAssociation86A610DA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2RouteTableCEDCEECE", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPrivateSubnet2Subnet0040C983", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1DefaultRoute95FDF9EB", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1EIP096967CB", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1NATGatewayAD3400C1", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableAssociation2ECEE1CB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1RouteTableC46AB2F4", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet1SubnetF6608456", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2DefaultRoute052936F6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2EIP8CCBA239", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2NATGateway91BFBEC9", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTable1DF17386", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2RouteTableAssociation227DE78D", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcPublicSubnet2Subnet492B6BFB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyVpcVPCGW488ACE0D", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -144365,7 +178806,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 11, "debug": 0 }, @@ -144417,6 +178858,125 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): Rule4C995B7F: No Metadata.com.aws.cloudformation.Context block found.; RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9: No Metadata.com.aws.cloudformation.Context block found.; Singleton8C7B99F3: No Metadata.com.aws.cloudformation.Context block found.; SingletonServiceRoleDDD815CD: No Metadata.com.aws.cloudformation.Context block found.; SingletonServiceRoleDefaultPolicy7525C238: No Metadata.com.aws.cloudformation.Context block found.; TopicBFC7AF6E: No Metadata.com.aws.cloudformation.Context block found.; TopicTokenSubscription178F3F75E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Rule4C995B7F", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 133, + "startColumn": 4, + "endLine": 133, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "RuleAllowEventRuleEventBridgeLambdaStackSingleton0D05990EAAD8CFB9", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 155, + "startColumn": 4, + "endLine": 155, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Singleton8C7B99F3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 112, + "startColumn": 4, + "endLine": 112, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonServiceRoleDDD815CD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 57, + "startColumn": 4, + "endLine": 57, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonServiceRoleDefaultPolicy7525C238", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 81, + "startColumn": 4, + "endLine": 81, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicBFC7AF6E", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 8, + "startColumn": 4, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicTokenSubscription178F3F75E", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 23, + "startColumn": 4, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -144669,7 +179229,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 15, "debug": 0 }, @@ -144678,6 +179238,138 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): ProxyAPI32755B5A: No Metadata.com.aws.cloudformation.Context block found.; ProxyAPIAccount6FF8D716: No Metadata.com.aws.cloudformation.Context block found.; ProxyAPICloudWatchRoleB8A087D1: No Metadata.com.aws.cloudformation.Context block found.; ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c: No Metadata.com.aws.cloudformation.Context block found.; ProxyAPIDeploymentStageprodBE6BE99F: No Metadata.com.aws.cloudformation.Context block found.; ProxyAPIaws4558A94F: No Metadata.com.aws.cloudformation.Context block found.; ProxyProxyResourceGETawsB89410CC: No Metadata.com.aws.cloudformation.Context block found.; ProxyProxyResourceGETawsGET6AEDAC86: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ProxyAPI32755B5A", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 4, + "endLine": 13, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ProxyAPIAccount6FF8D716", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 68, + "startColumn": 4, + "endLine": 68, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyAPICloudWatchRoleB8A087D1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 49, + "startColumn": 4, + "endLine": 49, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyAPIDeployment0905F2A51149e52ed55821cdb6db0214e7f00a2c", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyAPIDeploymentStageprodBE6BE99F", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 104, + "startColumn": 4, + "endLine": 104, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyAPIaws4558A94F", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 122, + "startColumn": 4, + "endLine": 122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyProxyResourceGETawsB89410CC", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 137, + "startColumn": 4, + "endLine": 137, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxyProxyResourceGETawsGET6AEDAC86", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 164, + "startColumn": 4, + "endLine": 164, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -145033,7 +179725,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 31, "debug": 0 }, @@ -145042,6 +179734,164 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): AmazonLinux2023WithGitPipeline: No Metadata.com.aws.cloudformation.Context block found.; AmazonLinux2023withGitAndNodeRecipe: No Metadata.com.aws.cloudformation.Context block found.; DockerComponenet: No Metadata.com.aws.cloudformation.Context block found.; EC2InstanceProfileForImageBuilderA043DE9F: No Metadata.com.aws.cloudformation.Context block found.; EcrRepoForImageBuilderCodeCatalystBF634BA6: No Metadata.com.aws.cloudformation.Context block found.; GitComponenet: No Metadata.com.aws.cloudformation.Context block found.; ImageBuilderDistConfig: No Metadata.com.aws.cloudformation.Context block found.; ImageBuilderInfraConfig: No Metadata.com.aws.cloudformation.Context block found.; InstanceProfileForImageBuilderC4A3DF73: No Metadata.com.aws.cloudformation.Context block found.; NodejsComponenet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AmazonLinux2023WithGitPipeline", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "AmazonLinux2023withGitAndNodeRecipe", + "resourceType": "AWS::ImageBuilder::ContainerRecipe" + }, + "location": { + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DockerComponenet", + "resourceType": "AWS::ImageBuilder::Component" + }, + "location": { + "startLine": 35, + "startColumn": 4, + "endLine": 35, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EC2InstanceProfileForImageBuilderA043DE9F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 157, + "startColumn": 4, + "endLine": 157, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EcrRepoForImageBuilderCodeCatalystBF634BA6", + "resourceType": "AWS::ECR::Repository" + }, + "location": { + "startLine": 43, + "startColumn": 4, + "endLine": 43, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GitComponenet", + "resourceType": "AWS::ImageBuilder::Component" + }, + "location": { + "startLine": 11, + "startColumn": 4, + "endLine": 11, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ImageBuilderDistConfig", + "resourceType": "AWS::ImageBuilder::DistributionConfiguration" + }, + "location": { + "startLine": 214, + "startColumn": 4, + "endLine": 214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ImageBuilderInfraConfig", + "resourceType": "AWS::ImageBuilder::InfrastructureConfiguration" + }, + "location": { + "startLine": 190, + "startColumn": 4, + "endLine": 190, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "InstanceProfileForImageBuilderC4A3DF73", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NodejsComponenet", + "resourceType": "AWS::ImageBuilder::Component" + }, + "location": { + "startLine": 23, + "startColumn": 4, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -145739,7 +180589,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 5, "debug": 0 }, @@ -145788,6 +180638,112 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): Inspector2EnableDelegatedAdminAccountResource99675B1A: No Metadata.com.aws.cloudformation.Context block found.; Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6: No Metadata.com.aws.cloudformation.Context block found.; Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResource56770C4B: No Metadata.com.aws.cloudformation.Context block found.; Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606: No Metadata.com.aws.cloudformation.Context block found.; Inspector2EnableDelegatedAdminAccountResourceInspector2UpdateOrganizationConfigurationResourceCustomResourcePolicy30425999: No Metadata.com.aws.cloudformation.Context block found.; Inspector2EnableDelegatedAdminAccountResourceInspector2UpdateOrganizationConfigurationResourceD5D1A649: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Inspector2EnableDelegatedAdminAccountResource99675B1A", + "entityType": "Resource", + "resourceType": "Custom::Inspector2EnableDelegatedAdminAccount" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 156, + "startColumn": 4, + "endLine": 156, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableDelegatedAdminResourceRoleC8FD65F6", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 46, + "startColumn": 4, + "endLine": 46, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResource56770C4B", + "resourceType": "Custom::Inspector2Enable" + }, + "location": { + "startLine": 111, + "startColumn": 4, + "endLine": 111, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2EnableDelegatedAdminAccountResourceInspector2EnableResourceInspectorRole00253606", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 92, + "startColumn": 4, + "endLine": 92, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2EnableDelegatedAdminAccountResourceInspector2UpdateOrganizationConfigurationResourceCustomResourcePolicy30425999", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 206, + "startColumn": 4, + "endLine": 206, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2EnableDelegatedAdminAccountResourceInspector2UpdateOrganizationConfigurationResourceD5D1A649", + "resourceType": "Custom::Inspector2OrganizationConfiguration" + }, + "location": { + "startLine": 179, + "startColumn": 4, + "endLine": 179, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -145899,7 +180855,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -145928,6 +180884,60 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): EnableInspector2ResourceInspector2EnableResource58B4E7AE: No Metadata.com.aws.cloudformation.Context block found.; EnableInspector2ResourceInspectorRole75753456: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EnableInspector2ResourceInspector2EnableResource58B4E7AE", + "entityType": "Resource", + "resourceType": "Custom::Inspector2Enable" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 65, + "startColumn": 4, + "endLine": 65, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EnableInspector2ResourceInspectorRole75753456", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 46, + "startColumn": 4, + "endLine": 46, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -145979,7 +180989,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 16, "debug": 0 }, @@ -146094,6 +181104,138 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): Inspector2FindingHandler1F85FFBC: No Metadata.com.aws.cloudformation.Context block found.; Inspector2FindingHandlerServiceRoleCEDAFBC1: No Metadata.com.aws.cloudformation.Context block found.; Inspector2InitialScanHandler460C9991: No Metadata.com.aws.cloudformation.Context block found.; Inspector2InitialScanHandlerServiceRoleA1739B7A: No Metadata.com.aws.cloudformation.Context block found.; Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530: No Metadata.com.aws.cloudformation.Context block found.; Inspector2MonitoringfindingScanRuleC84833CE: No Metadata.com.aws.cloudformation.Context block found.; Inspector2MonitoringinitialScanRule902E013C: No Metadata.com.aws.cloudformation.Context block found.; Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Inspector2FindingHandler1F85FFBC", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Inspector2FindingHandlerServiceRoleCEDAFBC1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 324, + "startColumn": 4, + "endLine": 324, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2InitialScanHandler460C9991", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 170, + "startColumn": 4, + "endLine": 170, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2InitialScanHandlerServiceRoleA1739B7A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 144, + "startColumn": 4, + "endLine": 144, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2MonitoringfindingScanRuleAllowEventRuleInspector2MonitoringStackInspector2FindingHandler16831F85366B3530", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2MonitoringfindingScanRuleC84833CE", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 88, + "startColumn": 4, + "endLine": 88, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2MonitoringinitialScanRule902E013C", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Inspector2MonitoringinitialScanRuleAllowEventRuleInspector2MonitoringStackInspector2InitialScanHandler1F2D84B66EB326AF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 55, + "startColumn": 4, + "endLine": 55, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -146445,7 +181587,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -146517,6 +181659,73 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): SampleLambdaB2FF4FA1: No Metadata.com.aws.cloudformation.Context block found.; SampleLambdaDashboard39118496: No Metadata.com.aws.cloudformation.Context block found.; SampleLambdaServiceRoleB1A8618F: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SampleLambdaB2FF4FA1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 60, + "startColumn": 4, + "endLine": 60, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SampleLambdaDashboard39118496", + "resourceType": "AWS::CloudWatch::Dashboard" + }, + "location": { + "startLine": 152, + "startColumn": 4, + "endLine": 152, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleLambdaServiceRoleB1A8618F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -146651,7 +181860,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 7, "debug": 0 }, @@ -146703,6 +181912,86 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Rule4C995B7F: No Metadata.com.aws.cloudformation.Context block found.; RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7: No Metadata.com.aws.cloudformation.Context block found.; Singleton8C7B99F3: No Metadata.com.aws.cloudformation.Context block found.; SingletonServiceRoleDDD815CD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Rule4C995B7F", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 77, + "startColumn": 4, + "endLine": 77, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Singleton8C7B99F3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonServiceRoleDDD815CD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -146864,7 +182153,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 5, "debug": 0 }, @@ -146893,6 +182182,73 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): HelperLayer49ADCD6B: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionBF21E41F: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionServiceRoleC555A460: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "HelperLayer49ADCD6B", + "entityType": "Resource", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 4, + "endLine": 19, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "LambdaFunctionBF21E41F", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 86, + "startColumn": 4, + "endLine": 86, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionServiceRoleC555A460", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -147013,7 +182369,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -147022,6 +182378,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): SampleBucketNotification: No Metadata.com.aws.cloudformation.Context block found.; SampleQueue49AAAEFF: No Metadata.com.aws.cloudformation.Context block found.; SampleQueuePolicy6B63351F: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SampleBucketNotification", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SampleQueue49AAAEFF", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 8, + "startColumn": 4, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleQueuePolicy6B63351F", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 62, + "startColumn": 4, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -147094,7 +182517,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -147103,6 +182526,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): SampleBucketNotification: No Metadata.com.aws.cloudformation.Context block found.; SampleTopic5FE9B5DC: No Metadata.com.aws.cloudformation.Context block found.; SampleTopicPolicy8BB7DA38: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SampleBucketNotification", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 110, + "startColumn": 4, + "endLine": 110, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SampleTopic5FE9B5DC", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 6, + "startColumn": 4, + "endLine": 6, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleTopicPolicy8BB7DA38", + "resourceType": "AWS::SNS::TopicPolicy" + }, + "location": { + "startLine": 54, + "startColumn": 4, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -147156,7 +182646,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -147208,6 +182698,86 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): S3EventNotificationsLambda20F17D80: No Metadata.com.aws.cloudformation.Context block found.; S3EventNotificationsLambdaServiceRoleD45D5063: No Metadata.com.aws.cloudformation.Context block found.; S3EventNotificationsLambdaServiceRoleDefaultPolicy17407B2C: No Metadata.com.aws.cloudformation.Context block found.; SampleBucket7F6F8160: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "S3EventNotificationsLambda20F17D80", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 103, + "startColumn": 4, + "endLine": 103, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "S3EventNotificationsLambdaServiceRoleD45D5063", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 42, + "startColumn": 4, + "endLine": 42, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "S3EventNotificationsLambdaServiceRoleDefaultPolicy17407B2C", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 74, + "startColumn": 4, + "endLine": 74, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBucket7F6F8160", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 8, + "startColumn": 4, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -147301,7 +182871,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 56, "debug": 0 }, @@ -147353,6 +182923,320 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (22 resource(s)): WidgetsWidgetHandler1BC9DB34: No Metadata.com.aws.cloudformation.Context block found.; WidgetsWidgetHandlerServiceRole8C2B589C: No Metadata.com.aws.cloudformation.Context block found.; WidgetsWidgetHandlerServiceRoleDefaultPolicyA8E097C8: No Metadata.com.aws.cloudformation.Context block found.; WidgetsWidgetStore0ED7FDB7: No Metadata.com.aws.cloudformation.Context block found.; Widgetswidgetsapi72353315: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiAccountDA847A77: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiCloudWatchRole8C2A5801: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiDeploymentStageprod0D8CD1B7: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiGET2086C825: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidAA19CFA8: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidDELETEE81619C6: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidGETABE1C648: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidPOST60B9DB49: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A: No Metadata.com.aws.cloudformation.Context block found.; WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "WidgetsWidgetHandler1BC9DB34", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 130, + "startColumn": 4, + "endLine": 130, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "WidgetsWidgetHandlerServiceRole8C2B589C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 41, + "startColumn": 4, + "endLine": 41, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetsWidgetHandlerServiceRoleDefaultPolicyA8E097C8", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 97, + "startColumn": 4, + "endLine": 97, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetsWidgetStore0ED7FDB7", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 4, + "endLine": 7, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Widgetswidgetsapi72353315", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiAccountDA847A77", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 198, + "startColumn": 4, + "endLine": 198, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiCloudWatchRole8C2A5801", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 179, + "startColumn": 4, + "endLine": 179, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiDeployment406A9BD66039252bdc49ee37076fc3c8f3a2eed8", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 217, + "startColumn": 4, + "endLine": 217, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiDeploymentStageprod0D8CD1B7", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 236, + "startColumn": 4, + "endLine": 236, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiGET2086C825", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 369, + "startColumn": 4, + "endLine": 369, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETFA317FE0", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 280, + "startColumn": 4, + "endLine": 280, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETD6697AB5", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 320, + "startColumn": 4, + "endLine": 320, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidAA19CFA8", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 387, + "startColumn": 4, + "endLine": 387, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidDELETEApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid2BAC56B6", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 685, + "startColumn": 4, + "endLine": 685, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidDELETEApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFDELETEid4096AFEF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 725, + "startColumn": 4, + "endLine": 725, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidDELETEE81619C6", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 768, + "startColumn": 4, + "endLine": 768, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidGETABE1C648", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 641, + "startColumn": 4, + "endLine": 641, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidGETApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid8E6C9CDF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 558, + "startColumn": 4, + "endLine": 558, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidGETApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFGETid5E1031AB", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidPOST60B9DB49", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 514, + "startColumn": 4, + "endLine": 514, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidPOSTApiPermissionMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTid9DF97A7A", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WidgetswidgetsapiidPOSTApiPermissionTestMyWidgetServiceStackWidgetswidgetsapi6BAE39EFPOSTidF1C29E62", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 471, + "startColumn": 4, + "endLine": 471, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -148630,7 +184514,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 3, + "warnings": 5, "informational": 44, "debug": 0 }, @@ -148743,6 +184627,372 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (26 resource(s)): BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76: No Metadata.com.aws.cloudformation.Context block found.; BigFanTopicAnyOtherStatusSubscriberQueuePolicy38415694: No Metadata.com.aws.cloudformation.Context block found.; BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D: No Metadata.com.aws.cloudformation.Context block found.; BigFanTopicStatusCreatedSubscriberQueue589E974E: No Metadata.com.aws.cloudformation.Context block found.; BigFanTopicStatusCreatedSubscriberQueuePolicy92D53255: No Metadata.com.aws.cloudformation.Context block found.; BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95: No Metadata.com.aws.cloudformation.Context block found.; DefaultLambdaHanderRoleA44A3BA8: No Metadata.com.aws.cloudformation.Context block found.; DefaultLambdaHanderRoleDefaultPolicy40E2D129: No Metadata.com.aws.cloudformation.Context block found.; SQSAnyOtherStatusSubscribeLambdaHandler4037E293: No Metadata.com.aws.cloudformation.Context block found.; SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB: No Metadata.com.aws.cloudformation.Context block found.; SQSAnyOtherStatusSubscribeLambdaHandlerServiceRoleDefaultPolicy7E448E8B: No Metadata.com.aws.cloudformation.Context block found.; SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B: No Metadata.com.aws.cloudformation.Context block found.; SQSCreatedStatusSubscribeLambdaHandler0467DB95: No Metadata.com.aws.cloudformation.Context block found.; SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A: No Metadata.com.aws.cloudformation.Context block found.; SQSCreatedStatusSubscribeLambdaHandlerServiceRoleDefaultPolicyF668D64A: No Metadata.com.aws.cloudformation.Context block found.; SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPI6E21715A: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPIAccountBD0B8261: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPICloudWatchRoleD603B41E: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPIDeploymentStageprod1F15C9DC: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPIErrorResponseModel11E9FBC4: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPIResponseModelD06A5A7F: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPISendEventD29495C2: No Metadata.com.aws.cloudformation.Context block found.; theBigFanAPISendEventPOSTBC493093: No Metadata.com.aws.cloudformation.Context block found.; theBigFanTopicF96567DE: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BigFanTopicAnyOtherStatusSubscriberQueue51F6CD76", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "BigFanTopicAnyOtherStatusSubscriberQueuePolicy38415694", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 128, + "startColumn": 7, + "endLine": 128, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BigFanTopicAnyOtherStatusSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B9905847D", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 156, + "startColumn": 7, + "endLine": 156, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BigFanTopicStatusCreatedSubscriberQueue589E974E", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BigFanTopicStatusCreatedSubscriberQueuePolicy92D53255", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BigFanTopicStatusCreatedSubscriberQueueTheBigFanStacktheBigFanTopicCC7EBE3B39DDDB95", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 80, + "startColumn": 7, + "endLine": 80, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DefaultLambdaHanderRoleA44A3BA8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 730, + "startColumn": 7, + "endLine": 730, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DefaultLambdaHanderRoleDefaultPolicy40E2D129", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 756, + "startColumn": 7, + "endLine": 756, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSAnyOtherStatusSubscribeLambdaHandler4037E293", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 429, + "startColumn": 7, + "endLine": 429, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRole395E81EB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 336, + "startColumn": 7, + "endLine": 336, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSAnyOtherStatusSubscribeLambdaHandlerServiceRoleDefaultPolicy7E448E8B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 371, + "startColumn": 7, + "endLine": 371, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSAnyOtherStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicAnyOtherStatusSubscriberQueue08FB964013A92B5B", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 448, + "startColumn": 7, + "endLine": 448, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSCreatedStatusSubscribeLambdaHandler0467DB95", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 283, + "startColumn": 7, + "endLine": 283, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSCreatedStatusSubscribeLambdaHandlerServiceRole36576A8A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 190, + "startColumn": 7, + "endLine": 190, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSCreatedStatusSubscribeLambdaHandlerServiceRoleDefaultPolicyF668D64A", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 225, + "startColumn": 7, + "endLine": 225, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSCreatedStatusSubscribeLambdaHandlerSqsEventSourceTheBigFanStackBigFanTopicStatusCreatedSubscriberQueueF8927E4802E7770C", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 302, + "startColumn": 7, + "endLine": 302, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPI6E21715A", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 457, + "startColumn": 7, + "endLine": 457, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPIAccountBD0B8261", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 508, + "startColumn": 7, + "endLine": 508, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPICloudWatchRoleD603B41E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 491, + "startColumn": 7, + "endLine": 491, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPIDeployment0A3D40CC3de72833f42963bffb25d554063d867d", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 526, + "startColumn": 7, + "endLine": 526, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPIDeploymentStageprod1F15C9DC", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 550, + "startColumn": 7, + "endLine": 550, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPIErrorResponseModel11E9FBC4", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 710, + "startColumn": 7, + "endLine": 710, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPIResponseModelD06A5A7F", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 684, + "startColumn": 7, + "endLine": 684, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPISendEventD29495C2", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 568, + "startColumn": 7, + "endLine": 568, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanAPISendEventPOSTBC493093", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 661, + "startColumn": 7, + "endLine": 661, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theBigFanTopicF96567DE", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -149711,7 +185961,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 25, "debug": 0 }, @@ -149781,6 +186031,281 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (19 resource(s)): APIGateway4XXErrors1647FE3DB: No Metadata.com.aws.cloudformation.Context block found.; APIGateway5XXErrors0A91D7B4E: No Metadata.com.aws.cloudformation.Context block found.; APIp99latencyalarm1s67095ACE: No Metadata.com.aws.cloudformation.Context block found.; CloudWatchDashBoard043C60B6: No Metadata.com.aws.cloudformation.Context block found.; DynamoDBErrors0FA6C66C9: No Metadata.com.aws.cloudformation.Context block found.; DynamoDBTableReadsWritesThrottled13F6F2AE: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambda2ErrorDE3BEB2F: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambda2Throttled090CFA4C: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerFB6EB814: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRole4C867B01: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdap99LongDuration1s739ED568: No Metadata.com.aws.cloudformation.Context block found.; HitsFF5AF8CD: No Metadata.com.aws.cloudformation.Context block found.; HttpAPI8D545486: No Metadata.com.aws.cloudformation.Context block found.; HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785: No Metadata.com.aws.cloudformation.Context block found.; HttpAPIDefaultRouteF9949FE6: No Metadata.com.aws.cloudformation.Context block found.; HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E: No Metadata.com.aws.cloudformation.Context block found.; HttpAPIDefaultStage1BC7D78F: No Metadata.com.aws.cloudformation.Context block found.; errorTopicE59AB483: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "APIGateway4XXErrors1647FE3DB", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 348, + "startColumn": 7, + "endLine": 348, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "APIGateway5XXErrors0A91D7B4E", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 379, + "startColumn": 7, + "endLine": 379, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "APIp99latencyalarm1s67095ACE", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 410, + "startColumn": 7, + "endLine": 410, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CloudWatchDashBoard043C60B6", + "resourceType": "AWS::CloudWatch::Dashboard" + }, + "location": { + "startLine": 1034, + "startColumn": 7, + "endLine": 1034, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoDBErrors0FA6C66C9", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 894, + "startColumn": 7, + "endLine": 894, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoDBTableReadsWritesThrottled13F6F2AE", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 635, + "startColumn": 7, + "endLine": 635, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambda2ErrorDE3BEB2F", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 475, + "startColumn": 7, + "endLine": 475, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambda2Throttled090CFA4C", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 570, + "startColumn": 7, + "endLine": 570, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerFB6EB814", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerServiceRole4C867B01", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 56, + "startColumn": 7, + "endLine": 56, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 101, + "startColumn": 7, + "endLine": 101, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdap99LongDuration1s739ED568", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 505, + "startColumn": 7, + "endLine": 505, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HitsFF5AF8CD", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 22, + "startColumn": 7, + "endLine": 22, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HttpAPI8D545486", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "location": { + "startLine": 178, + "startColumn": 7, + "endLine": 178, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HttpAPIDefaultRouteDefaultRouteIntegration9F0AC785", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 237, + "startColumn": 7, + "endLine": 237, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HttpAPIDefaultRouteF9949FE6", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 260, + "startColumn": 7, + "endLine": 260, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HttpAPIDefaultRouteTheCloudwatchDashboardStackHttpAPIDefaultRoute851EEAB4Permission3852997E", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 218, + "startColumn": 7, + "endLine": 218, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HttpAPIDefaultStage1BC7D78F", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "location": { + "startLine": 273, + "startColumn": 7, + "endLine": 273, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "errorTopicE59AB483", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 279, + "startColumn": 7, + "endLine": 279, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -150321,7 +186846,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 4, + "warnings": 6, "informational": 49, "debug": 0 }, @@ -150477,6 +187002,385 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (27 resource(s)): ApiGatewaySnsRole904B65D6: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewaySnsRoleDefaultPolicyBC64AD46: No Metadata.com.aws.cloudformation.Context block found.; DestinedEventBus14820B65: No Metadata.com.aws.cloudformation.Context block found.; FailureLambdaHandlerBB58C051: No Metadata.com.aws.cloudformation.Context block found.; FailureLambdaHandlerServiceRole7E0414CB: No Metadata.com.aws.cloudformation.Context block found.; SuccessLambdaHandler0E2CD797: No Metadata.com.aws.cloudformation.Context block found.; SuccessLambdaHandlerServiceRole77BD70C4: No Metadata.com.aws.cloudformation.Context block found.; destinedLambda8DF776BB: No Metadata.com.aws.cloudformation.Context block found.; destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799: No Metadata.com.aws.cloudformation.Context block found.; destinedLambdaEventInvokeConfig3CA2AF7E: No Metadata.com.aws.cloudformation.Context block found.; destinedLambdaServiceRole87608B6F: No Metadata.com.aws.cloudformation.Context block found.; destinedLambdaServiceRoleDefaultPolicy9D15647D: No Metadata.com.aws.cloudformation.Context block found.; destinedLambdatheDestinedLambdaTopic8E937C7F: No Metadata.com.aws.cloudformation.Context block found.; failureRule10D0B2E4: No Metadata.com.aws.cloudformation.Context block found.; failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724: No Metadata.com.aws.cloudformation.Context block found.; successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2: No Metadata.com.aws.cloudformation.Context block found.; successRuleE9E88056: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIAccount1A39207B: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIBAB2789B: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPICloudWatchRoleCDF408DA: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIDeploymentStageprodD67BDFB2: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIErrorResponseModel5F76D2FC: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPIResponseModel7D59062C: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPISendEventC20585CF: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaAPISendEventGETC3F11CCE: No Metadata.com.aws.cloudformation.Context block found.; theDestinedLambdaTopic8F2C8FB6: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiGatewaySnsRole904B65D6", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 791, + "startColumn": 7, + "endLine": 791, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "ApiGatewaySnsRoleDefaultPolicyBC64AD46", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 817, + "startColumn": 7, + "endLine": 817, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DestinedEventBus14820B65", + "resourceType": "AWS::Events::EventBus" + }, + "location": { + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FailureLambdaHandlerBB58C051", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 452, + "startColumn": 7, + "endLine": 452, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FailureLambdaHandlerServiceRole7E0414CB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 394, + "startColumn": 7, + "endLine": 394, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SuccessLambdaHandler0E2CD797", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 295, + "startColumn": 7, + "endLine": 295, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SuccessLambdaHandlerServiceRole77BD70C4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 237, + "startColumn": 7, + "endLine": 237, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambda8DF776BB", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 133, + "startColumn": 7, + "endLine": 133, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambdaAllowInvokeTheDestinedLambdaStacktheDestinedLambdaTopic8CE84AB4D93BC799", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 185, + "startColumn": 7, + "endLine": 185, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambdaEventInvokeConfig3CA2AF7E", + "resourceType": "AWS::Lambda::EventInvokeConfig" + }, + "location": { + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambdaServiceRole87608B6F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambdaServiceRoleDefaultPolicy9D15647D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 75, + "startColumn": 7, + "endLine": 75, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "destinedLambdatheDestinedLambdaTopic8E937C7F", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "failureRule10D0B2E4", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 487, + "startColumn": 7, + "endLine": 487, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "failureRuleAllowEventRuleTheDestinedLambdaStackfailureRule39380610D37AD724", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 509, + "startColumn": 7, + "endLine": 509, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "successRuleAllowEventRuleTheDestinedLambdaStacksuccessRuleDD139E31353F8BE2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 360, + "startColumn": 7, + "endLine": 360, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "successRuleE9E88056", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 338, + "startColumn": 7, + "endLine": 338, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIAccount1A39207B", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 569, + "startColumn": 7, + "endLine": 569, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIBAB2789B", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 518, + "startColumn": 7, + "endLine": 518, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPICloudWatchRoleCDF408DA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 552, + "startColumn": 7, + "endLine": 552, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIDeploymentC364859Eae40584f53d9b7bb31907a57bb781ad3", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 587, + "startColumn": 7, + "endLine": 587, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIDeploymentStageprodD67BDFB2", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 611, + "startColumn": 7, + "endLine": 611, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIErrorResponseModel5F76D2FC", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 771, + "startColumn": 7, + "endLine": 771, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPIResponseModel7D59062C", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 745, + "startColumn": 7, + "endLine": 745, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPISendEventC20585CF", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 629, + "startColumn": 7, + "endLine": 629, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaAPISendEventGETC3F11CCE", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 722, + "startColumn": 7, + "endLine": 722, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "theDestinedLambdaTopic8F2C8FB6", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -151578,7 +188482,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 26, "debug": 0 }, @@ -151648,6 +188552,242 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (16 resource(s)): DefaultLambdaHanderRoleA44A3BA8: No Metadata.com.aws.cloudformation.Context block found.; DefaultLambdaHanderRoleDefaultPolicy40E2D129: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIAccount4440C728: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPICA573C81: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPICloudWatchRoleEF2543E3: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIDeploymentStageprod0700648B: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIErrorResponseModelEB962BDA: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIInsertItemACBD0A97: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIInsertItemPOSTCDE209E1: No Metadata.com.aws.cloudformation.Context block found.; DynamoStreamerAPIResponseModel5C9A2FF6: No Metadata.com.aws.cloudformation.Context block found.; TheDynamoStreamer641C5E5B: No Metadata.com.aws.cloudformation.Context block found.; dynamoStreamSubscriberLambdaHandlerD2AAE139: No Metadata.com.aws.cloudformation.Context block found.; dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245: No Metadata.com.aws.cloudformation.Context block found.; dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47: No Metadata.com.aws.cloudformation.Context block found.; dynamoStreamSubscriberLambdaHandlerServiceRoleDefaultPolicy47FBFBB9: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DefaultLambdaHanderRoleA44A3BA8", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 458, + "startColumn": 7, + "endLine": 458, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "DefaultLambdaHanderRoleDefaultPolicy40E2D129", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 503, + "startColumn": 7, + "endLine": 503, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIAccount4440C728", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 239, + "startColumn": 7, + "endLine": 239, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPICA573C81", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 188, + "startColumn": 7, + "endLine": 188, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPICloudWatchRoleEF2543E3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 222, + "startColumn": 7, + "endLine": 222, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIDeployment8F20C3E380de34421a04eed5e7cc4a28266c5690", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 257, + "startColumn": 7, + "endLine": 257, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIDeploymentStageprod0700648B", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 281, + "startColumn": 7, + "endLine": 281, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIErrorResponseModelEB962BDA", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 438, + "startColumn": 7, + "endLine": 438, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIInsertItemACBD0A97", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 299, + "startColumn": 7, + "endLine": 299, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIInsertItemPOSTCDE209E1", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 389, + "startColumn": 7, + "endLine": 389, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoStreamerAPIResponseModel5C9A2FF6", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 412, + "startColumn": 7, + "endLine": 412, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheDynamoStreamer641C5E5B", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 28, + "startColumn": 7, + "endLine": 28, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "dynamoStreamSubscriberLambdaHandlerD2AAE139", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 158, + "startColumn": 7, + "endLine": 158, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "dynamoStreamSubscriberLambdaHandlerDynamoDBEventSourceTheDynamoStreamerStackTheDynamoStreamerB472C427C1D10245", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "dynamoStreamSubscriberLambdaHandlerServiceRole70DB8A47", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 62, + "startColumn": 7, + "endLine": 62, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "dynamoStreamSubscriberLambdaHandlerServiceRoleDefaultPolicy47FBFBB9", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 100, + "startColumn": 7, + "endLine": 100, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -152239,7 +189379,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 6, + "warnings": 8, "informational": 54, "debug": 0 }, @@ -152456,6 +189596,385 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (27 resource(s)): EndpointANY485C938B: No Metadata.com.aws.cloudformation.Context block found.; EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414: No Metadata.com.aws.cloudformation.Context block found.; EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701: No Metadata.com.aws.cloudformation.Context block found.; EndpointAccountB8304247: No Metadata.com.aws.cloudformation.Context block found.; EndpointCloudWatchRoleC3C64E0F: No Metadata.com.aws.cloudformation.Context block found.; EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297: No Metadata.com.aws.cloudformation.Context block found.; EndpointDeploymentStageprodB78BEEA0: No Metadata.com.aws.cloudformation.Context block found.; EndpointEEF1FD8F: No Metadata.com.aws.cloudformation.Context block found.; Endpointproxy39E2174E: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYC09721C5: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer1LambdaC3C4DA46: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer1LambdaRuleC1D6BC2F: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer1LambdaServiceRole70132707: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer2LambdaB7E263A7: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer2LambdaRule5894DC8E: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer2LambdaServiceRole130B888D: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer3Lambda880BEEDF: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer3LambdaRule41A00643: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4: No Metadata.com.aws.cloudformation.Context block found.; atmConsumer3LambdaServiceRoleCF9BAEA7: No Metadata.com.aws.cloudformation.Context block found.; atmProducerLambda71029F8F: No Metadata.com.aws.cloudformation.Context block found.; atmProducerLambdaServiceRoleDefaultPolicy984C4CFE: No Metadata.com.aws.cloudformation.Context block found.; atmProducerLambdaServiceRoleEF3D6079: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointANY485C938B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 933, + "startColumn": 7, + "endLine": 933, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "EndpointANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYFFED7414", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 887, + "startColumn": 7, + "endLine": 887, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANY2B0F1701", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 847, + "startColumn": 7, + "endLine": 847, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointAccountB8304247", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 626, + "startColumn": 7, + "endLine": 626, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointCloudWatchRoleC3C64E0F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 609, + "startColumn": 7, + "endLine": 609, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDeployment318525DA98cf1fe46f6a8379cb8241a5e412a297", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 643, + "startColumn": 7, + "endLine": 643, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDeploymentStageprodB78BEEA0", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 658, + "startColumn": 7, + "endLine": 658, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointEEF1FD8F", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 575, + "startColumn": 7, + "endLine": 575, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Endpointproxy39E2174E", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 676, + "startColumn": 7, + "endLine": 676, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYApiPermissionTestTheEventbridgeAtmStackEndpoint54DB5714ANYproxy14296A4D", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 760, + "startColumn": 7, + "endLine": 760, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYApiPermissionTheEventbridgeAtmStackEndpoint54DB5714ANYproxyC2C9F151", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 720, + "startColumn": 7, + "endLine": 720, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYC09721C5", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 803, + "startColumn": 7, + "endLine": 803, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer1LambdaC3C4DA46", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 208, + "startColumn": 7, + "endLine": 208, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer1LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer1LambdaRuleEB0F67E45F2D141B", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 266, + "startColumn": 7, + "endLine": 266, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer1LambdaRuleC1D6BC2F", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 244, + "startColumn": 7, + "endLine": 244, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer1LambdaServiceRole70132707", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 151, + "startColumn": 7, + "endLine": 151, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer2LambdaB7E263A7", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 357, + "startColumn": 7, + "endLine": 357, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer2LambdaRule5894DC8E", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 394, + "startColumn": 7, + "endLine": 394, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer2LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer2LambdaRuleF5729F59774A4AE8", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 416, + "startColumn": 7, + "endLine": 416, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer2LambdaServiceRole130B888D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 300, + "startColumn": 7, + "endLine": 300, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer3Lambda880BEEDF", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 507, + "startColumn": 7, + "endLine": 507, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer3LambdaRule41A00643", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 544, + "startColumn": 7, + "endLine": 544, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer3LambdaRuleAllowEventRuleTheEventbridgeAtmStackatmConsumer3LambdaRuleC926722A1B0365D4", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 566, + "startColumn": 7, + "endLine": 566, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmConsumer3LambdaServiceRoleCF9BAEA7", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 450, + "startColumn": 7, + "endLine": 450, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmProducerLambda71029F8F", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 115, + "startColumn": 7, + "endLine": 115, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmProducerLambdaServiceRoleDefaultPolicy984C4CFE", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 57, + "startColumn": 7, + "endLine": 57, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "atmProducerLambdaServiceRoleEF3D6079", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -153661,7 +191180,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 4, + "warnings": 6, "informational": 42, "debug": 0 }, @@ -153792,6 +191311,307 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): CircuitBreaker4FAEA3DB: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGateway122B123C: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayANYE076316B: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayAccount58B91765: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayCloudWatchRole934DF897: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDeploymentStageprod84F6B9E5: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayproxy1147E2CF: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayproxyANY759880DB: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780: No Metadata.com.aws.cloudformation.Context block found.; ErrorLambdaHandler4224322A: No Metadata.com.aws.cloudformation.Context block found.; ErrorLambdaHandlerServiceRole5D9F8D61: No Metadata.com.aws.cloudformation.Context block found.; ErrorLambdaHandlerServiceRoleDefaultPolicy9B079F8F: No Metadata.com.aws.cloudformation.Context block found.; WebserviceIntegrationLambdaHandler5E349AB7: No Metadata.com.aws.cloudformation.Context block found.; WebserviceIntegrationLambdaHandlerServiceRole851361F8: No Metadata.com.aws.cloudformation.Context block found.; WebserviceIntegrationLambdaHandlerServiceRoleDefaultPolicy86CA93C2: No Metadata.com.aws.cloudformation.Context block found.; webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102: No Metadata.com.aws.cloudformation.Context block found.; webserviceErrorRuleCE293636: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreaker4FAEA3DB", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 63, + "startColumn": 7, + "endLine": 63, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "CircuitBreakerGateway122B123C", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 439, + "startColumn": 7, + "endLine": 439, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY33532EB9", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 751, + "startColumn": 7, + "endLine": 751, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANY2D2F06E0", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 711, + "startColumn": 7, + "endLine": 711, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayANYE076316B", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 797, + "startColumn": 7, + "endLine": 797, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayAccount58B91765", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 490, + "startColumn": 7, + "endLine": 490, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayCloudWatchRole934DF897", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 473, + "startColumn": 7, + "endLine": 473, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayDeployment9F2A82FA10260421dc831e654354d72baa60bfb0", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 507, + "startColumn": 7, + "endLine": 507, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayDeploymentStageprod84F6B9E5", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 522, + "startColumn": 7, + "endLine": 522, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayproxy1147E2CF", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 540, + "startColumn": 7, + "endLine": 540, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayproxyANY759880DB", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 667, + "startColumn": 7, + "endLine": 667, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayproxyANYApiPermissionTestTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxyE09D3DF2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 624, + "startColumn": 7, + "endLine": 624, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayproxyANYApiPermissionTheEventbridgeCircuitBreakerStackCircuitBreakerGateway4CD07824ANYproxy584EF780", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 584, + "startColumn": 7, + "endLine": 584, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ErrorLambdaHandler4224322A", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 372, + "startColumn": 7, + "endLine": 372, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ErrorLambdaHandlerServiceRole5D9F8D61", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 256, + "startColumn": 7, + "endLine": 256, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ErrorLambdaHandlerServiceRoleDefaultPolicy9B079F8F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 306, + "startColumn": 7, + "endLine": 306, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebserviceIntegrationLambdaHandler5E349AB7", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 220, + "startColumn": 7, + "endLine": 220, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebserviceIntegrationLambdaHandlerServiceRole851361F8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 97, + "startColumn": 7, + "endLine": 97, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebserviceIntegrationLambdaHandlerServiceRoleDefaultPolicy86CA93C2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 154, + "startColumn": 7, + "endLine": 154, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "webserviceErrorRuleAllowEventRuleTheEventbridgeCircuitBreakerStackwebserviceErrorRule5CA5849AC9CE1102", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 430, + "startColumn": 7, + "endLine": 430, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "webserviceErrorRuleCE293636", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 408, + "startColumn": 7, + "endLine": 408, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -154739,7 +192559,7 @@ "counts": { "fatal": 0, "errors": 5, - "warnings": 10, + "warnings": 12, "informational": 86, "debug": 0 }, @@ -155055,6 +192875,762 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (56 resource(s)): BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691: No Metadata.com.aws.cloudformation.Context block found.; BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC: No Metadata.com.aws.cloudformation.Context block found.; BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36: No Metadata.com.aws.cloudformation.Context block found.; Ec2ClusterEE43E89D: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinition8E3B365E: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinitionAppContainerLogGroup20407D7C: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinitionExecutionRoleDefaultPolicy1632DA52: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinitionExecutionRoleE69A8E33: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinitionTaskRoleDefaultPolicy798E9D9D: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskDefinitionTaskRoleE3C2BCAA: No Metadata.com.aws.cloudformation.Context block found.; LandingBucket23FE90FB: No Metadata.com.aws.cloudformation.Context block found.; LandingBucketNotificationsEF1634C6: No Metadata.com.aws.cloudformation.Context block found.; LoadLambdaHandlerFDA03D53: No Metadata.com.aws.cloudformation.Context block found.; LoadLambdaHandlerServiceRole83E61748: No Metadata.com.aws.cloudformation.Context block found.; LoadLambdaHandlerServiceRoleDefaultPolicy63B03BA2: No Metadata.com.aws.cloudformation.Context block found.; ObserveLambdaHandler685FFDBB: No Metadata.com.aws.cloudformation.Context block found.; ObserveLambdaHandlerServiceRole040C69BA: No Metadata.com.aws.cloudformation.Context block found.; TransformLambdaHandler60ABE8EE: No Metadata.com.aws.cloudformation.Context block found.; TransformLambdaHandlerServiceRole710C039E: No Metadata.com.aws.cloudformation.Context block found.; TransformLambdaHandlerServiceRoleDefaultPolicy94353D30: No Metadata.com.aws.cloudformation.Context block found.; TransformedDataB0572681: No Metadata.com.aws.cloudformation.Context block found.; Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.; extractLambdaHandlerD06B8F09: No Metadata.com.aws.cloudformation.Context block found.; extractLambdaHandlerServiceRole8A50F829: No Metadata.com.aws.cloudformation.Context block found.; extractLambdaHandlerServiceRoleDefaultPolicyB880CB8F: No Metadata.com.aws.cloudformation.Context block found.; extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5: No Metadata.com.aws.cloudformation.Context block found.; loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA: No Metadata.com.aws.cloudformation.Context block found.; loadRuleF0FAF418: No Metadata.com.aws.cloudformation.Context block found.; newObjectInLandingBucketEventQueue67CBE2F2: No Metadata.com.aws.cloudformation.Context block found.; newObjectInLandingBucketEventQueuePolicy6B7CC541: No Metadata.com.aws.cloudformation.Context block found.; observeRule9CF2E16C: No Metadata.com.aws.cloudformation.Context block found.; observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A: No Metadata.com.aws.cloudformation.Context block found.; transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030: No Metadata.com.aws.cloudformation.Context block found.; transformRuleFEA34632: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 206, + "startColumn": 7, + "endLine": 206, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 157, + "startColumn": 7, + "endLine": 157, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2ClusterEE43E89D", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 664, + "startColumn": 7, + "endLine": 664, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinition8E3B365E", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 814, + "startColumn": 7, + "endLine": 814, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinitionAppContainerLogGroup20407D7C", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 825, + "startColumn": 7, + "endLine": 825, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinitionExecutionRoleDefaultPolicy1632DA52", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 910, + "startColumn": 7, + "endLine": 910, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinitionExecutionRoleE69A8E33", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 845, + "startColumn": 7, + "endLine": 845, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinitionTaskRoleDefaultPolicy798E9D9D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 738, + "startColumn": 7, + "endLine": 738, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskDefinitionTaskRoleE3C2BCAA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 684, + "startColumn": 7, + "endLine": 684, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LandingBucket23FE90FB", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LandingBucketNotificationsEF1634C6", + "resourceType": "Custom::S3BucketNotifications" + }, + "location": { + "startLine": 69, + "startColumn": 7, + "endLine": 69, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoadLambdaHandlerFDA03D53", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1441, + "startColumn": 7, + "endLine": 1441, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoadLambdaHandlerServiceRole83E61748", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1324, + "startColumn": 7, + "endLine": 1324, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoadLambdaHandlerServiceRoleDefaultPolicy63B03BA2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1374, + "startColumn": 7, + "endLine": 1374, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ObserveLambdaHandler685FFDBB", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1591, + "startColumn": 7, + "endLine": 1591, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ObserveLambdaHandlerServiceRole040C69BA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1533, + "startColumn": 7, + "endLine": 1533, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TransformLambdaHandler60ABE8EE", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1232, + "startColumn": 7, + "endLine": 1232, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TransformLambdaHandlerServiceRole710C039E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1148, + "startColumn": 7, + "endLine": 1148, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TransformLambdaHandlerServiceRoleDefaultPolicy94353D30", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1172, + "startColumn": 7, + "endLine": 1172, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TransformedDataB0572681", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc8378EB38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 224, + "startColumn": 7, + "endLine": 224, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 644, + "startColumn": 7, + "endLine": 644, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 549, + "startColumn": 7, + "endLine": 549, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 534, + "startColumn": 7, + "endLine": 534, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 520, + "startColumn": 7, + "endLine": 520, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 503, + "startColumn": 7, + "endLine": 503, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 630, + "startColumn": 7, + "endLine": 630, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 601, + "startColumn": 7, + "endLine": 601, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 615, + "startColumn": 7, + "endLine": 615, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 584, + "startColumn": 7, + "endLine": 584, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 308, + "startColumn": 7, + "endLine": 308, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 323, + "startColumn": 7, + "endLine": 323, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 346, + "startColumn": 7, + "endLine": 346, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 290, + "startColumn": 7, + "endLine": 290, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 259, + "startColumn": 7, + "endLine": 259, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 430, + "startColumn": 7, + "endLine": 430, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 445, + "startColumn": 7, + "endLine": 445, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 468, + "startColumn": 7, + "endLine": 468, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 398, + "startColumn": 7, + "endLine": 398, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 412, + "startColumn": 7, + "endLine": 412, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 381, + "startColumn": 7, + "endLine": 381, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 658, + "startColumn": 7, + "endLine": 658, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "extractLambdaHandlerD06B8F09", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1095, + "startColumn": 7, + "endLine": 1095, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "extractLambdaHandlerServiceRole8A50F829", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 944, + "startColumn": 7, + "endLine": 944, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "extractLambdaHandlerServiceRoleDefaultPolicyB880CB8F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1009, + "startColumn": 7, + "endLine": 1009, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "extractLambdaHandlerSqsEventSourceTheEventbridgeEtlStacknewObjectInLandingBucketEventQueueA6103BFC894EEFC5", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 1114, + "startColumn": 7, + "endLine": 1114, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "loadRuleAllowEventRuleTheEventbridgeEtlStackloadRuleE4CE7871DBE863BA", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1499, + "startColumn": 7, + "endLine": 1499, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "loadRuleF0FAF418", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1477, + "startColumn": 7, + "endLine": 1477, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "newObjectInLandingBucketEventQueue67CBE2F2", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "newObjectInLandingBucketEventQueuePolicy6B7CC541", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 123, + "startColumn": 7, + "endLine": 123, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "observeRule9CF2E16C", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1619, + "startColumn": 7, + "endLine": 1619, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "observeRuleAllowEventRuleTheEventbridgeEtlStackobserveRuleDD299C278D51D81A", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1641, + "startColumn": 7, + "endLine": 1641, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "transformRuleAllowEventRuleTheEventbridgeEtlStacktransformRuleF338DDCD2082D030", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1290, + "startColumn": 7, + "endLine": 1290, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "transformRuleFEA34632", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1268, + "startColumn": 7, + "endLine": 1268, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -156993,7 +195569,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 15, "debug": 0 }, @@ -157063,6 +195639,151 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): CircuitBreakerGateway122B123C: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDefaultRouteCB8326BD: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerGatewayDefaultStageC51956FB: No Metadata.com.aws.cloudformation.Context block found.; CircuitBreakerTable02DAD2B8: No Metadata.com.aws.cloudformation.Context block found.; UnreliableLambdaHandlerD4A4DED9: No Metadata.com.aws.cloudformation.Context block found.; UnreliableLambdaHandlerServiceRole955A5CFD: No Metadata.com.aws.cloudformation.Context block found.; UnreliableLambdaHandlerServiceRoleDefaultPolicyC00E31E2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CircuitBreakerGateway122B123C", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "CircuitBreakerGatewayDefaultRouteCB8326BD", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayDefaultRouteDefaultRouteIntegrationF55AEBDB", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 240, + "startColumn": 7, + "endLine": 240, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayDefaultRouteTheLambdaCircuitBreakerStackCircuitBreakerGatewayDefaultRoute883D7748Permission8BF71621", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 221, + "startColumn": 7, + "endLine": 221, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerGatewayDefaultStageC51956FB", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "location": { + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CircuitBreakerTable02DAD2B8", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnreliableLambdaHandlerD4A4DED9", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 169, + "startColumn": 7, + "endLine": 169, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnreliableLambdaHandlerServiceRole955A5CFD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnreliableLambdaHandlerServiceRoleDefaultPolicyC00E31E2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -157403,7 +196124,7 @@ "counts": { "fatal": 0, "errors": 9, - "warnings": 11, + "warnings": 13, "informational": 53, "debug": 0 }, @@ -157837,6 +196558,593 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (43 resource(s)): BookingSagaFA991213: No Metadata.com.aws.cloudformation.Context block found.; BookingSagaRole82982544: No Metadata.com.aws.cloudformation.Context block found.; BookingSagaRoleDefaultPolicy6595FE9E: No Metadata.com.aws.cloudformation.Context block found.; BookingsB1C24132: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTable288D85B3: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableANYFE1A7CB0: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableAccount4A29EC28: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableCloudWatchRole130684F0: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableDeploymentStageprod92F0690D: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableproxy9F7D6084: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableproxyANY8778A55C: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063: No Metadata.com.aws.cloudformation.Context block found.; SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567: No Metadata.com.aws.cloudformation.Context block found.; cancelFlightLambdaHandler437EEC76: No Metadata.com.aws.cloudformation.Context block found.; cancelFlightLambdaHandlerServiceRole7F2439CB: No Metadata.com.aws.cloudformation.Context block found.; cancelFlightLambdaHandlerServiceRoleDefaultPolicy59295FBF: No Metadata.com.aws.cloudformation.Context block found.; cancelHotelLambdaHandler09F13EF6: No Metadata.com.aws.cloudformation.Context block found.; cancelHotelLambdaHandlerServiceRole4815D152: No Metadata.com.aws.cloudformation.Context block found.; cancelHotelLambdaHandlerServiceRoleDefaultPolicy58EA01C9: No Metadata.com.aws.cloudformation.Context block found.; confirmFlightLambdaHandler96C3663F: No Metadata.com.aws.cloudformation.Context block found.; confirmFlightLambdaHandlerServiceRole45F91B6E: No Metadata.com.aws.cloudformation.Context block found.; confirmFlightLambdaHandlerServiceRoleDefaultPolicyA7A08CCB: No Metadata.com.aws.cloudformation.Context block found.; confirmHotelLambdaHandler882ACF2D: No Metadata.com.aws.cloudformation.Context block found.; confirmHotelLambdaHandlerServiceRoleD5F8F90E: No Metadata.com.aws.cloudformation.Context block found.; confirmHotelLambdaHandlerServiceRoleDefaultPolicy69537B84: No Metadata.com.aws.cloudformation.Context block found.; refundPaymentLambdaHandler932D11D5: No Metadata.com.aws.cloudformation.Context block found.; refundPaymentLambdaHandlerServiceRole62F72F0D: No Metadata.com.aws.cloudformation.Context block found.; refundPaymentLambdaHandlerServiceRoleDefaultPolicy39778F0D: No Metadata.com.aws.cloudformation.Context block found.; reserveFlightLambdaHandler3C75473D: No Metadata.com.aws.cloudformation.Context block found.; reserveFlightLambdaHandlerServiceRole985C586D: No Metadata.com.aws.cloudformation.Context block found.; reserveFlightLambdaHandlerServiceRoleDefaultPolicyEE804D92: No Metadata.com.aws.cloudformation.Context block found.; reserveHotelLambdaHandler020AE24A: No Metadata.com.aws.cloudformation.Context block found.; reserveHotelLambdaHandlerServiceRole452F23B7: No Metadata.com.aws.cloudformation.Context block found.; reserveHotelLambdaHandlerServiceRoleDefaultPolicy18196942: No Metadata.com.aws.cloudformation.Context block found.; sagaLambdaHandlerFC24742F: No Metadata.com.aws.cloudformation.Context block found.; sagaLambdaHandlerServiceRole7EB685BD: No Metadata.com.aws.cloudformation.Context block found.; sagaLambdaHandlerServiceRoleDefaultPolicyFE9A40F4: No Metadata.com.aws.cloudformation.Context block found.; takePaymentLambdaHandlerB96529D4: No Metadata.com.aws.cloudformation.Context block found.; takePaymentLambdaHandlerServiceRole56CA2808: No Metadata.com.aws.cloudformation.Context block found.; takePaymentLambdaHandlerServiceRoleDefaultPolicy95F3D626: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BookingSagaFA991213", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 1421, + "startColumn": 7, + "endLine": 1421, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "BookingSagaRole82982544", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1232, + "startColumn": 7, + "endLine": 1232, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BookingSagaRoleDefaultPolicy6595FE9E", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1331, + "startColumn": 7, + "endLine": 1331, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BookingsB1C24132", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTable288D85B3", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 1557, + "startColumn": 7, + "endLine": 1557, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANY8FD1CF02", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1869, + "startColumn": 7, + "endLine": 1869, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYF602862D", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1829, + "startColumn": 7, + "endLine": 1829, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableANYFE1A7CB0", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1915, + "startColumn": 7, + "endLine": 1915, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableAccount4A29EC28", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 1608, + "startColumn": 7, + "endLine": 1608, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableCloudWatchRole130684F0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1591, + "startColumn": 7, + "endLine": 1591, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableDeployment96972FE77ef5b9d25f9d7a35316435e48684bb49", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 1625, + "startColumn": 7, + "endLine": 1625, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableDeploymentStageprod92F0690D", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 1640, + "startColumn": 7, + "endLine": 1640, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableproxy9F7D6084", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 1658, + "startColumn": 7, + "endLine": 1658, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableproxyANY8778A55C", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 1785, + "startColumn": 7, + "endLine": 1785, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableproxyANYApiPermissionTestTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyFFAFB063", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1742, + "startColumn": 7, + "endLine": 1742, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SagaPatternSingleTableproxyANYApiPermissionTheSagaStepfunctionSingleTableStackSagaPatternSingleTable3D97C406ANYproxyCC0ED567", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1702, + "startColumn": 7, + "endLine": 1702, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelFlightLambdaHandler437EEC76", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 469, + "startColumn": 7, + "endLine": 469, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelFlightLambdaHandlerServiceRole7F2439CB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 359, + "startColumn": 7, + "endLine": 359, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelFlightLambdaHandlerServiceRoleDefaultPolicy59295FBF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 404, + "startColumn": 7, + "endLine": 404, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelHotelLambdaHandler09F13EF6", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 907, + "startColumn": 7, + "endLine": 907, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelHotelLambdaHandlerServiceRole4815D152", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 797, + "startColumn": 7, + "endLine": 797, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "cancelHotelLambdaHandlerServiceRoleDefaultPolicy58EA01C9", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 842, + "startColumn": 7, + "endLine": 842, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmFlightLambdaHandler96C3663F", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 323, + "startColumn": 7, + "endLine": 323, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmFlightLambdaHandlerServiceRole45F91B6E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 213, + "startColumn": 7, + "endLine": 213, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmFlightLambdaHandlerServiceRoleDefaultPolicyA7A08CCB", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 258, + "startColumn": 7, + "endLine": 258, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmHotelLambdaHandler882ACF2D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 761, + "startColumn": 7, + "endLine": 761, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmHotelLambdaHandlerServiceRoleD5F8F90E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 651, + "startColumn": 7, + "endLine": 651, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "confirmHotelLambdaHandlerServiceRoleDefaultPolicy69537B84", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 696, + "startColumn": 7, + "endLine": 696, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "refundPaymentLambdaHandler932D11D5", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1199, + "startColumn": 7, + "endLine": 1199, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "refundPaymentLambdaHandlerServiceRole62F72F0D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1089, + "startColumn": 7, + "endLine": 1089, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "refundPaymentLambdaHandlerServiceRoleDefaultPolicy39778F0D", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1134, + "startColumn": 7, + "endLine": 1134, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveFlightLambdaHandler3C75473D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 177, + "startColumn": 7, + "endLine": 177, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveFlightLambdaHandlerServiceRole985C586D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveFlightLambdaHandlerServiceRoleDefaultPolicyEE804D92", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveHotelLambdaHandler020AE24A", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 615, + "startColumn": 7, + "endLine": 615, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveHotelLambdaHandlerServiceRole452F23B7", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 505, + "startColumn": 7, + "endLine": 505, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "reserveHotelLambdaHandlerServiceRoleDefaultPolicy18196942", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 550, + "startColumn": 7, + "endLine": 550, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sagaLambdaHandlerFC24742F", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1546, + "startColumn": 7, + "endLine": 1546, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sagaLambdaHandlerServiceRole7EB685BD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1455, + "startColumn": 7, + "endLine": 1455, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sagaLambdaHandlerServiceRoleDefaultPolicyFE9A40F4", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 1481, + "startColumn": 7, + "endLine": 1481, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "takePaymentLambdaHandlerB96529D4", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1053, + "startColumn": 7, + "endLine": 1053, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "takePaymentLambdaHandlerServiceRole56CA2808", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 943, + "startColumn": 7, + "endLine": 943, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "takePaymentLambdaHandlerServiceRoleDefaultPolicy95F3D626", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 988, + "startColumn": 7, + "endLine": 988, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -158994,7 +198302,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 4, + "warnings": 6, "informational": 43, "debug": 0 }, @@ -159125,6 +198433,307 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): EndpointANY485C938B: No Metadata.com.aws.cloudformation.Context block found.; EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34: No Metadata.com.aws.cloudformation.Context block found.; EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E: No Metadata.com.aws.cloudformation.Context block found.; EndpointAccountB8304247: No Metadata.com.aws.cloudformation.Context block found.; EndpointCloudWatchRoleC3C64E0F: No Metadata.com.aws.cloudformation.Context block found.; EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d: No Metadata.com.aws.cloudformation.Context block found.; EndpointDeploymentStageprodB78BEEA0: No Metadata.com.aws.cloudformation.Context block found.; EndpointEEF1FD8F: No Metadata.com.aws.cloudformation.Context block found.; Endpointproxy39E2174E: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7: No Metadata.com.aws.cloudformation.Context block found.; EndpointproxyANYC09721C5: No Metadata.com.aws.cloudformation.Context block found.; Messages804FA4EB: No Metadata.com.aws.cloudformation.Context block found.; RDSPublishQueue2BEA1A7F: No Metadata.com.aws.cloudformation.Context block found.; SQSPublishLambdaHandler51EE31BE: No Metadata.com.aws.cloudformation.Context block found.; SQSPublishLambdaHandlerServiceRole4F9A1044: No Metadata.com.aws.cloudformation.Context block found.; SQSPublishLambdaHandlerServiceRoleDefaultPolicy986E25F0: No Metadata.com.aws.cloudformation.Context block found.; SQSSubscribeLambdaHandlerBBB58615: No Metadata.com.aws.cloudformation.Context block found.; SQSSubscribeLambdaHandlerServiceRoleB6261F09: No Metadata.com.aws.cloudformation.Context block found.; SQSSubscribeLambdaHandlerServiceRoleDefaultPolicy828D90B1: No Metadata.com.aws.cloudformation.Context block found.; SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EndpointANY485C938B", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 718, + "startColumn": 7, + "endLine": 718, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "EndpointANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANY6F14FF34", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 672, + "startColumn": 7, + "endLine": 672, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYA4DEC70E", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 632, + "startColumn": 7, + "endLine": 632, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointAccountB8304247", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 411, + "startColumn": 7, + "endLine": 411, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointCloudWatchRoleC3C64E0F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 394, + "startColumn": 7, + "endLine": 394, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDeployment318525DAd36b722f04bf6c9ce03a896415e5529d", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 428, + "startColumn": 7, + "endLine": 428, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDeploymentStageprodB78BEEA0", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 443, + "startColumn": 7, + "endLine": 443, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointEEF1FD8F", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 360, + "startColumn": 7, + "endLine": 360, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Endpointproxy39E2174E", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 461, + "startColumn": 7, + "endLine": 461, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYApiPermissionTestTheScalableWebhookStackEndpoint462DCEBFANYproxy171AE875", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 545, + "startColumn": 7, + "endLine": 545, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYApiPermissionTheScalableWebhookStackEndpoint462DCEBFANYproxy6224F0D7", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 505, + "startColumn": 7, + "endLine": 505, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointproxyANYC09721C5", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 588, + "startColumn": 7, + "endLine": 588, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Messages804FA4EB", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RDSPublishQueue2BEA1A7F", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 34, + "startColumn": 7, + "endLine": 34, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSPublishLambdaHandler51EE31BE", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 166, + "startColumn": 7, + "endLine": 166, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSPublishLambdaHandlerServiceRole4F9A1044", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSPublishLambdaHandlerServiceRoleDefaultPolicy986E25F0", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 101, + "startColumn": 7, + "endLine": 101, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSSubscribeLambdaHandlerBBB58615", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 332, + "startColumn": 7, + "endLine": 332, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSSubscribeLambdaHandlerServiceRoleB6261F09", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 202, + "startColumn": 7, + "endLine": 202, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSSubscribeLambdaHandlerServiceRoleDefaultPolicy828D90B1", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSSubscribeLambdaHandlerSqsEventSourceTheScalableWebhookStackRDSPublishQueue119E6E347AD14066", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 351, + "startColumn": 7, + "endLine": 351, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -160080,7 +199689,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 9, "debug": 0 }, @@ -160150,6 +199759,112 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): RequestTableC81DB378: No Metadata.com.aws.cloudformation.Context block found.; scheduledLambda8A84450D: No Metadata.com.aws.cloudformation.Context block found.; scheduledLambdaServiceRoleB98DFEFD: No Metadata.com.aws.cloudformation.Context block found.; scheduledLambdaServiceRoleDefaultPolicyDE6B5E9F: No Metadata.com.aws.cloudformation.Context block found.; scheduledLambdaschedule99960653: No Metadata.com.aws.cloudformation.Context block found.; scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "RequestTableC81DB378", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "scheduledLambda8A84450D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 163, + "startColumn": 7, + "endLine": 163, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "scheduledLambdaServiceRoleB98DFEFD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "scheduledLambdaServiceRoleDefaultPolicyDE6B5E9F", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "scheduledLambdaschedule99960653", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 186, + "startColumn": 7, + "endLine": 186, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "scheduledLambdascheduleAllowEventRuleTheScheduledLambdaStackscheduledLambdaschedule2517ED8826359872", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 208, + "startColumn": 7, + "endLine": 208, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -160353,7 +200068,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 36, "debug": 0 }, @@ -160423,6 +200138,307 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): ApiApiLogsRole90293F72: No Metadata.com.aws.cloudformation.Context block found.; ApiCustomerFEDF5079: No Metadata.com.aws.cloudformation.Context block found.; ApiCustomerServiceRole28709567: No Metadata.com.aws.cloudformation.Context block found.; ApiCustomerServiceRoleDefaultPolicy285BC091: No Metadata.com.aws.cloudformation.Context block found.; ApiDefaultApiKeyF991C37B: No Metadata.com.aws.cloudformation.Context block found.; ApiF70053CD: No Metadata.com.aws.cloudformation.Context block found.; ApiLoyaltyE1BE9BB1: No Metadata.com.aws.cloudformation.Context block found.; ApiLoyaltyServiceRole2B487CD2: No Metadata.com.aws.cloudformation.Context block found.; ApiLoyaltyServiceRoleDefaultPolicyBAB04E12: No Metadata.com.aws.cloudformation.Context block found.; ApiMutationaddCustomerResolver53321A05: No Metadata.com.aws.cloudformation.Context block found.; ApiMutationremoveCustomerResolver8435F803: No Metadata.com.aws.cloudformation.Context block found.; ApiMutationsaveCustomerResolver85516C23: No Metadata.com.aws.cloudformation.Context block found.; ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0: No Metadata.com.aws.cloudformation.Context block found.; ApiQuerygetCustomerResolver007520DC: No Metadata.com.aws.cloudformation.Context block found.; ApiQuerygetCustomersResolver522EE433: No Metadata.com.aws.cloudformation.Context block found.; ApiQuerygetLoyaltyLevelResolverC862DCEF: No Metadata.com.aws.cloudformation.Context block found.; ApiSchema510EECD7: No Metadata.com.aws.cloudformation.Context block found.; CustomerTable260DCC08: No Metadata.com.aws.cloudformation.Context block found.; LoyaltyLambdaHandler5918F0DA: No Metadata.com.aws.cloudformation.Context block found.; LoyaltyLambdaHandlerServiceRole62E814E8: No Metadata.com.aws.cloudformation.Context block found.; thesimplegraphqlserviceapikey: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiApiLogsRole90293F72", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "ApiCustomerFEDF5079", + "resourceType": "AWS::AppSync::DataSource" + }, + "location": { + "startLine": 179, + "startColumn": 7, + "endLine": 179, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiCustomerServiceRole28709567", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiCustomerServiceRoleDefaultPolicy285BC091", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 149, + "startColumn": 7, + "endLine": 149, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiDefaultApiKeyF991C37B", + "resourceType": "AWS::AppSync::ApiKey" + }, + "location": { + "startLine": 84, + "startColumn": 7, + "endLine": 84, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiF70053CD", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "location": { + "startLine": 52, + "startColumn": 7, + "endLine": 52, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiLoyaltyE1BE9BB1", + "resourceType": "AWS::AppSync::DataSource" + }, + "location": { + "startLine": 402, + "startColumn": 7, + "endLine": 402, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiLoyaltyServiceRole2B487CD2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 343, + "startColumn": 7, + "endLine": 343, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiLoyaltyServiceRoleDefaultPolicyBAB04E12", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 372, + "startColumn": 7, + "endLine": 372, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiMutationaddCustomerResolver53321A05", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 251, + "startColumn": 7, + "endLine": 251, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiMutationremoveCustomerResolver8435F803", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 323, + "startColumn": 7, + "endLine": 323, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiMutationsaveCustomerResolver85516C23", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 275, + "startColumn": 7, + "endLine": 275, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiMutationsaveCustomerWithFirstOrderResolver66DBDFD0", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 299, + "startColumn": 7, + "endLine": 299, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiQuerygetCustomerResolver007520DC", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 227, + "startColumn": 7, + "endLine": 227, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiQuerygetCustomersResolver522EE433", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiQuerygetLoyaltyLevelResolverC862DCEF", + "resourceType": "AWS::AppSync::Resolver" + }, + "location": { + "startLine": 426, + "startColumn": 7, + "endLine": 426, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiSchema510EECD7", + "resourceType": "AWS::AppSync::GraphQLSchema" + }, + "location": { + "startLine": 67, + "startColumn": 7, + "endLine": 67, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomerTable260DCC08", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 463, + "startColumn": 7, + "endLine": 463, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoyaltyLambdaHandler5918F0DA", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 554, + "startColumn": 7, + "endLine": 554, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoyaltyLambdaHandlerServiceRole62E814E8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 497, + "startColumn": 7, + "endLine": 497, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "thesimplegraphqlserviceapikey", + "resourceType": "AWS::AppSync::ApiKey" + }, + "location": { + "startLine": 440, + "startColumn": 7, + "endLine": 440, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -161249,7 +201265,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 15, "debug": 0 }, @@ -161319,6 +201335,151 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): DynamoLambdaHandlerFB6EB814: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRole4C867B01: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090: No Metadata.com.aws.cloudformation.Context block found.; EndpointDefaultRouteB7B22F2B: No Metadata.com.aws.cloudformation.Context block found.; EndpointDefaultRouteDefaultRouteIntegration4584A785: No Metadata.com.aws.cloudformation.Context block found.; EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3: No Metadata.com.aws.cloudformation.Context block found.; EndpointDefaultStage0AD21F27: No Metadata.com.aws.cloudformation.Context block found.; EndpointEEF1FD8F: No Metadata.com.aws.cloudformation.Context block found.; HitsFF5AF8CD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambdaHandlerFB6EB814", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 169, + "startColumn": 7, + "endLine": 169, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "DynamoLambdaHandlerServiceRole4C867B01", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 104, + "startColumn": 7, + "endLine": 104, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDefaultRouteB7B22F2B", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "location": { + "startLine": 263, + "startColumn": 7, + "endLine": 263, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDefaultRouteDefaultRouteIntegration4584A785", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 240, + "startColumn": 7, + "endLine": 240, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDefaultRouteTheSimpleWebserviceStackEndpointDefaultRouteC99962AAPermission4BC0F1E3", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 221, + "startColumn": 7, + "endLine": 221, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointDefaultStage0AD21F27", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "location": { + "startLine": 276, + "startColumn": 7, + "endLine": 276, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EndpointEEF1FD8F", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "location": { + "startLine": 181, + "startColumn": 7, + "endLine": 181, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HitsFF5AF8CD", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -161659,7 +201820,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 3, + "warnings": 5, "informational": 13, "debug": 0 }, @@ -161749,6 +201910,164 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): DefaultRoute: No Metadata.com.aws.cloudformation.Context block found.; HttpApiRole79B5C31A: No Metadata.com.aws.cloudformation.Context block found.; Integ: No Metadata.com.aws.cloudformation.Context block found.; StateMachine2E01A3A5: No Metadata.com.aws.cloudformation.Context block found.; StateMachineRoleB840431D: No Metadata.com.aws.cloudformation.Context block found.; StateMachineRoleDefaultPolicyDF1E6607: No Metadata.com.aws.cloudformation.Context block found.; pineappleCheckLambdaHandlerFDB742D5: No Metadata.com.aws.cloudformation.Context block found.; pineappleCheckLambdaHandlerServiceRoleFC4E3211: No Metadata.com.aws.cloudformation.Context block found.; thestatemachineapi69C81CC4: No Metadata.com.aws.cloudformation.Context block found.; thestatemachineapiDefaultStageE23A2C15: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DefaultRoute", + "entityType": "Resource", + "resourceType": "AWS::ApiGatewayV2::Route" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 310, + "startColumn": 7, + "endLine": 310, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "HttpApiRole79B5C31A", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 236, + "startColumn": 7, + "endLine": 236, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Integ", + "resourceType": "AWS::ApiGatewayV2::Integration" + }, + "location": { + "startLine": 287, + "startColumn": 7, + "endLine": 287, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StateMachine2E01A3A5", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 199, + "startColumn": 7, + "endLine": 199, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StateMachineRoleB840431D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 123, + "startColumn": 7, + "endLine": 123, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StateMachineRoleDefaultPolicyDF1E6607", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 162, + "startColumn": 7, + "endLine": 162, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "pineappleCheckLambdaHandlerFDB742D5", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "pineappleCheckLambdaHandlerServiceRoleFC4E3211", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "thestatemachineapi69C81CC4", + "resourceType": "AWS::ApiGatewayV2::Api" + }, + "location": { + "startLine": 246, + "startColumn": 7, + "endLine": 246, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "thestatemachineapiDefaultStageE23A2C15", + "resourceType": "AWS::ApiGatewayV2::Stage" + }, + "location": { + "startLine": 259, + "startColumn": 7, + "endLine": 259, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -162040,7 +202359,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 22, "debug": 0 }, @@ -162110,6 +202429,177 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): HelloWorldHandler30C22324: No Metadata.com.aws.cloudformation.Context block found.; HelloWorldHandlerServiceRole56E6BFBA: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPI5BA7C2CE: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIAccount3BD065DB: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPICloudWatchRoleEE79D232: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIDeploymentStageprodEF5FA49F: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIhelloworldC628BF91: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIhelloworldGET802399FF: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F: No Metadata.com.aws.cloudformation.Context block found.; WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "HelloWorldHandler30C22324", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 90, + "startColumn": 7, + "endLine": 90, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "HelloWorldHandlerServiceRole56E6BFBA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPI5BA7C2CE", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 106, + "startColumn": 7, + "endLine": 106, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIAccount3BD065DB", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 157, + "startColumn": 7, + "endLine": 157, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPICloudWatchRoleEE79D232", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 140, + "startColumn": 7, + "endLine": 140, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIDeploymentDDF5787C50cd54e1b820c67ddfe6e24991b1dd3f", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 173, + "startColumn": 7, + "endLine": 173, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIDeploymentStageprodEF5FA49F", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIhelloworldC628BF91", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 221, + "startColumn": 7, + "endLine": 221, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIhelloworldGET802399FF", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 364, + "startColumn": 7, + "endLine": 364, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIhelloworldGETApiPermissionAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworldC704FF2F", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 265, + "startColumn": 7, + "endLine": 265, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WafGatewayAPIhelloworldGETApiPermissionTestAPIGatewayStackWafGatewayAPI0F5D6A0EGEThelloworld3D2EE2D0", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 305, + "startColumn": 7, + "endLine": 305, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -162614,7 +203104,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -162623,6 +203113,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): WebACL: No Metadata.com.aws.cloudformation.Context block found.; WebACLAssociation: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "WebACL", + "entityType": "Resource", + "resourceType": "AWS::WAFv2::WebACL" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 98, + "startColumn": 7, + "endLine": 98, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "WebACLAssociation", + "resourceType": "AWS::WAFv2::WebACLAssociation" + }, + "location": { + "startLine": 131, + "startColumn": 7, + "endLine": 131, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -162725,7 +203269,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 12, "debug": 0 }, @@ -162795,6 +203339,112 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerFB6EB814: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerSNSTopic27AC0D9B: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRole4C867B01: No Metadata.com.aws.cloudformation.Context block found.; DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090: No Metadata.com.aws.cloudformation.Context block found.; HitsFF5AF8CD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DynamoLambdaHandlerAllowInvokeTheXrayDynamoFlowSNSTopicCD4F86C04F3B929A", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 201, + "startColumn": 7, + "endLine": 201, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "DynamoLambdaHandlerFB6EB814", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 180, + "startColumn": 7, + "endLine": 180, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerSNSTopic27AC0D9B", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 232, + "startColumn": 7, + "endLine": 232, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerServiceRole4C867B01", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 7, + "endLine": 59, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamoLambdaHandlerServiceRoleDefaultPolicy2B40B090", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "HitsFF5AF8CD", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 7, + "endLine": 25, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -163073,7 +203723,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 10, "debug": 0 }, @@ -163143,6 +203793,99 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): httpLambdaHandler66D9C9A8: No Metadata.com.aws.cloudformation.Context block found.; httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B: No Metadata.com.aws.cloudformation.Context block found.; httpLambdaHandlerSNSTopicEE70E0D4: No Metadata.com.aws.cloudformation.Context block found.; httpLambdaHandlerServiceRole01D49A7D: No Metadata.com.aws.cloudformation.Context block found.; httpLambdaHandlerServiceRoleDefaultPolicy1B465FFF: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "httpLambdaHandler66D9C9A8", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 121, + "startColumn": 7, + "endLine": 121, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "httpLambdaHandlerAllowInvokeTheXrayHttpFlowSNSTopic4903AFE806D4343B", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 142, + "startColumn": 7, + "endLine": 142, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "httpLambdaHandlerSNSTopicEE70E0D4", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 173, + "startColumn": 7, + "endLine": 173, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "httpLambdaHandlerServiceRole01D49A7D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 7, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "httpLambdaHandlerServiceRoleDefaultPolicy1B465FFF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 60, + "startColumn": 7, + "endLine": 60, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -163379,7 +204122,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 3, + "warnings": 5, "informational": 18, "debug": 0 }, @@ -163492,6 +204235,164 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): Queue4A7E3555: No Metadata.com.aws.cloudformation.Context block found.; sqsLambdaHandler0DD5DF9B: No Metadata.com.aws.cloudformation.Context block found.; sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97: No Metadata.com.aws.cloudformation.Context block found.; sqsLambdaHandlerSNSTopicC33599CE: No Metadata.com.aws.cloudformation.Context block found.; sqsLambdaHandlerServiceRole2F57B7B5: No Metadata.com.aws.cloudformation.Context block found.; sqsLambdaHandlerServiceRoleDefaultPolicyBB0CE949: No Metadata.com.aws.cloudformation.Context block found.; sqsSubscribeLambdaHandlerD66392B8: No Metadata.com.aws.cloudformation.Context block found.; sqsSubscribeLambdaHandlerServiceRole8F070FD3: No Metadata.com.aws.cloudformation.Context block found.; sqsSubscribeLambdaHandlerServiceRoleDefaultPolicyFCDD3C26: No Metadata.com.aws.cloudformation.Context block found.; sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue4A7E3555", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "sqsLambdaHandler0DD5DF9B", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 151, + "startColumn": 7, + "endLine": 151, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsLambdaHandlerAllowInvokeTheXraySQSFlowSNSTopicA671E652005D4F97", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 172, + "startColumn": 7, + "endLine": 172, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsLambdaHandlerSNSTopicC33599CE", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 203, + "startColumn": 7, + "endLine": 203, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsLambdaHandlerServiceRole2F57B7B5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsLambdaHandlerServiceRoleDefaultPolicyBB0CE949", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 83, + "startColumn": 7, + "endLine": 83, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsSubscribeLambdaHandlerD66392B8", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 341, + "startColumn": 7, + "endLine": 341, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsSubscribeLambdaHandlerServiceRole8F070FD3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 237, + "startColumn": 7, + "endLine": 237, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsSubscribeLambdaHandlerServiceRoleDefaultPolicyFCDD3C26", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 280, + "startColumn": 7, + "endLine": 280, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sqsSubscribeLambdaHandlerSqsEventSourceTheXraySQSFlowQueue7994C13E559DCA00", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 360, + "startColumn": 7, + "endLine": 360, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -163886,7 +204787,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 3, + "warnings": 5, "informational": 20, "debug": 0 }, @@ -163999,6 +204900,177 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): TheXRayTracerSnsTopicCCE2005E: No Metadata.com.aws.cloudformation.Context block found.; snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0: No Metadata.com.aws.cloudformation.Context block found.; snsLambdaHandlerE7B0ABE3: No Metadata.com.aws.cloudformation.Context block found.; snsLambdaHandlerSNSTopic3B2CFF1D: No Metadata.com.aws.cloudformation.Context block found.; snsLambdaHandlerServiceRole7F428B88: No Metadata.com.aws.cloudformation.Context block found.; snsLambdaHandlerServiceRoleDefaultPolicy80707B6B: No Metadata.com.aws.cloudformation.Context block found.; snsSubscriptionLambdaHandler68619CD8: No Metadata.com.aws.cloudformation.Context block found.; snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919: No Metadata.com.aws.cloudformation.Context block found.; snsSubscriptionLambdaHandlerServiceRole215E543C: No Metadata.com.aws.cloudformation.Context block found.; snsSubscriptionLambdaHandlerServiceRoleDefaultPolicy23353421: No Metadata.com.aws.cloudformation.Context block found.; snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TheXRayTracerSnsTopicCCE2005E", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "snsLambdaHandlerAllowInvokeTheXraySnsFlowSNSTopic80B9595935AF18F0", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 165, + "startColumn": 7, + "endLine": 165, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsLambdaHandlerE7B0ABE3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 144, + "startColumn": 7, + "endLine": 144, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsLambdaHandlerSNSTopic3B2CFF1D", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 196, + "startColumn": 7, + "endLine": 196, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsLambdaHandlerServiceRole7F428B88", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 42, + "startColumn": 7, + "endLine": 42, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsLambdaHandlerServiceRoleDefaultPolicy80707B6B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 76, + "startColumn": 7, + "endLine": 76, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsSubscriptionLambdaHandler68619CD8", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 318, + "startColumn": 7, + "endLine": 318, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsSubscriptionLambdaHandlerAllowInvokeTheXraySnsFlowTheXRayTracerSnsTopic86AE60703F758919", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 339, + "startColumn": 7, + "endLine": 339, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsSubscriptionLambdaHandlerServiceRole215E543C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 230, + "startColumn": 7, + "endLine": 230, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsSubscriptionLambdaHandlerServiceRoleDefaultPolicy23353421", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 257, + "startColumn": 7, + "endLine": 257, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "snsSubscriptionLambdaHandlerTheXRayTracerSnsTopic6FDB75DD", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 357, + "startColumn": 7, + "endLine": 357, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -164456,7 +205528,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 23, "debug": 0 }, @@ -164465,6 +205537,203 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): ApiGatewaySNSRole1BAAAE75: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewaySNSRoleDefaultPolicyCA5D0260: No Metadata.com.aws.cloudformation.Context block found.; TheXRayTracerSnsFanOutTopicDE7E70F8: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIA84CAE80: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIAccount092EDE74: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPICloudWatchRoleCCB113F4: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIDeploymentStageprod85442A48: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIErrorResponseModel24719E91: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIGET7490A366: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIResponseModel2591E14E: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIproxy719DA214: No Metadata.com.aws.cloudformation.Context block found.; xrayTracerAPIproxyGET4E348609: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiGatewaySNSRole1BAAAE75", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 388, + "startColumn": 7, + "endLine": 388, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "ApiGatewaySNSRoleDefaultPolicyCA5D0260", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 414, + "startColumn": 7, + "endLine": 414, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheXRayTracerSnsFanOutTopicDE7E70F8", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 8, + "startColumn": 7, + "endLine": 8, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIA84CAE80", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 17, + "startColumn": 7, + "endLine": 17, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIAccount092EDE74", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 68, + "startColumn": 7, + "endLine": 68, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPICloudWatchRoleCCB113F4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 51, + "startColumn": 7, + "endLine": 51, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIDeploymentB3CB89A0a689bf68bef2302d0715c2d1a50794fc", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 87, + "startColumn": 7, + "endLine": 87, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIDeploymentStageprod85442A48", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 112, + "startColumn": 7, + "endLine": 112, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIErrorResponseModel24719E91", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 368, + "startColumn": 7, + "endLine": 368, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIGET7490A366", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 208, + "startColumn": 7, + "endLine": 208, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIResponseModel2591E14E", + "resourceType": "AWS::ApiGateway::Model" + }, + "location": { + "startLine": 342, + "startColumn": 7, + "endLine": 342, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIproxy719DA214", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 226, + "startColumn": 7, + "endLine": 226, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "xrayTracerAPIproxyGET4E348609", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 319, + "startColumn": 7, + "endLine": 319, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -165000,7 +206269,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 25, "debug": 0 }, @@ -165052,6 +206321,190 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): ApiCorsLambda5083F55F: No Metadata.com.aws.cloudformation.Context block found.; ApiCorsLambdaServiceRole0DB39061: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCors6DE4076F: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsAccount3D15B20D: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsCloudWatchRole9C3700F0: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsDeploymentStageprod7F1DD875: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsexample5AE32A3C: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsexampleGETCC962CB3: No Metadata.com.aws.cloudformation.Context block found.; ApiGatewayWithCorsexampleOPTIONS2F5D9F4D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiCorsLambda5083F55F", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ApiCorsLambdaServiceRole0DB39061", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCors6DE4076F", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 70, + "startColumn": 4, + "endLine": 70, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsAccount3D15B20D", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 125, + "startColumn": 4, + "endLine": 125, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsCloudWatchRole9C3700F0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 106, + "startColumn": 4, + "endLine": 106, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsDeployment248C0700a88c9b4f7fb5eae343fa3265f3ea5ffe", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 142, + "startColumn": 4, + "endLine": 142, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsDeploymentStageprod7F1DD875", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 161, + "startColumn": 4, + "endLine": 161, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsexample5AE32A3C", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 179, + "startColumn": 4, + "endLine": 179, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsexampleGETApiPermissionApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample83B6C89A", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 266, + "startColumn": 4, + "endLine": 266, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsexampleGETApiPermissionTestApiCorsLambdaStackApiGatewayWithCorsBD29564EGETexample07A026FD", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 306, + "startColumn": 4, + "endLine": 306, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsexampleGETCC962CB3", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 365, + "startColumn": 4, + "endLine": 365, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGatewayWithCorsexampleOPTIONS2F5D9F4D", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 222, + "startColumn": 4, + "endLine": 222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -165627,7 +207080,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 6, + "warnings": 8, "informational": 41, "debug": 0 }, @@ -165765,6 +207218,385 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (27 resource(s)): SampleAPIEventBridgeMultiConsumer52DC1403: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumerAccount468DDDC0: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumeritems997C90A7: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7: No Metadata.com.aws.cloudformation.Context block found.; SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56: No Metadata.com.aws.cloudformation.Context block found.; consumer3firehose: No Metadata.com.aws.cloudformation.Context block found.; consumer3firehoseEventsRoleDefaultPolicyE23D0802: No Metadata.com.aws.cloudformation.Context block found.; consumer3firehoseEventsRoleECB13871: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer1Lambda4AF2292E: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer1LambdaRule288E5FF9: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer1LambdaServiceRoleC8CCBFC5: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer2Lambda1631C47A: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer2LambdaRule54312CB1: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer2LambdaServiceRole6B878884: No Metadata.com.aws.cloudformation.Context block found.; eventConsumer3KinesisRuleB8D02F6F: No Metadata.com.aws.cloudformation.Context block found.; eventProducerLambda100D549C: No Metadata.com.aws.cloudformation.Context block found.; eventProducerLambdaServiceRoleD019EB99: No Metadata.com.aws.cloudformation.Context block found.; eventProducerLambdaServiceRoleDefaultPolicy73C54CA7: No Metadata.com.aws.cloudformation.Context block found.; myRoleE60D68E8: No Metadata.com.aws.cloudformation.Context block found.; s3attrCCE68BF6: No Metadata.com.aws.cloudformation.Context block found.; testngestbucketD7155299: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SampleAPIEventBridgeMultiConsumer52DC1403", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 488, + "startColumn": 4, + "endLine": 488, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumerAccount468DDDC0", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 543, + "startColumn": 4, + "endLine": 543, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumerCloudWatchRoleE43B891E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 524, + "startColumn": 4, + "endLine": 524, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumerDeploymentD1A021868a8af37caaafdc0f762b784f7555ad86", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 559, + "startColumn": 4, + "endLine": 559, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumerDeploymentStageprodDE087A58", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 578, + "startColumn": 4, + "endLine": 578, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumeritems997C90A7", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 596, + "startColumn": 4, + "endLine": 596, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitemsA86E071B", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 640, + "startColumn": 4, + "endLine": 640, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumeritemsPOSTApiPermissionTestApiEventBridgeLambdaStackSampleAPIEventBridgeMultiConsumerF10899BCPOSTitems910D1EE7", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 680, + "startColumn": 4, + "endLine": 680, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleAPIEventBridgeMultiConsumeritemsPOSTD2DFDA56", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 723, + "startColumn": 4, + "endLine": 723, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumer3firehose", + "resourceType": "AWS::KinesisFirehose::DeliveryStream" + }, + "location": { + "startLine": 395, + "startColumn": 4, + "endLine": 395, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumer3firehoseEventsRoleDefaultPolicyE23D0802", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 447, + "startColumn": 4, + "endLine": 447, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumer3firehoseEventsRoleECB13871", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 415, + "startColumn": 4, + "endLine": 415, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer1Lambda4AF2292E", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 145, + "startColumn": 4, + "endLine": 145, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer1LambdaRule288E5FF9", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 174, + "startColumn": 4, + "endLine": 174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer1LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer1Lambda3A2F7294318BC23E", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 196, + "startColumn": 4, + "endLine": 196, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer1LambdaServiceRoleC8CCBFC5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 120, + "startColumn": 4, + "endLine": 120, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer2Lambda1631C47A", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 255, + "startColumn": 4, + "endLine": 255, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer2LambdaRule54312CB1", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 284, + "startColumn": 4, + "endLine": 284, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer2LambdaRuleAllowEventRuleApiEventBridgeLambdaStackeventConsumer2LambdaB60B781EECB58ACF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 306, + "startColumn": 4, + "endLine": 306, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer2LambdaServiceRole6B878884", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 230, + "startColumn": 4, + "endLine": 230, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventConsumer3KinesisRuleB8D02F6F", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 479, + "startColumn": 4, + "endLine": 479, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventProducerLambda100D549C", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventProducerLambdaServiceRoleD019EB99", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "eventProducerLambdaServiceRoleDefaultPolicy73C54CA7", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 57, + "startColumn": 4, + "endLine": 57, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myRoleE60D68E8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 334, + "startColumn": 4, + "endLine": 334, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "s3attrCCE68BF6", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 369, + "startColumn": 4, + "endLine": 369, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "testngestbucketD7155299", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 314, + "startColumn": 4, + "endLine": 314, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -166669,7 +208501,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 22, "debug": 0 }, @@ -166698,6 +208530,216 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (14 resource(s)): ApiGW45519054: No Metadata.com.aws.cloudformation.Context block found.; ApiGWANYD1FA3A5F: No Metadata.com.aws.cloudformation.Context block found.; ApiGWAccountF46C4EC5: No Metadata.com.aws.cloudformation.Context block found.; ApiGWCloudWatchRole51A9A431: No Metadata.com.aws.cloudformation.Context block found.; ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd: No Metadata.com.aws.cloudformation.Context block found.; ApiGWDeploymentStageprodDFD8EC11: No Metadata.com.aws.cloudformation.Context block found.; ApiGWexampleDE4620AC: No Metadata.com.aws.cloudformation.Context block found.; ApiGWexamplePOST6CAE6201: No Metadata.com.aws.cloudformation.Context block found.; RestAPIRoleA3B4EFA3: No Metadata.com.aws.cloudformation.Context block found.; SQSQueue7674CD17: No Metadata.com.aws.cloudformation.Context block found.; SQSTriggerLambda99F71FB3: No Metadata.com.aws.cloudformation.Context block found.; SQSTriggerLambdaServiceRole0C427DE8: No Metadata.com.aws.cloudformation.Context block found.; SQSTriggerLambdaServiceRoleDefaultPolicyB9CC6FE7: No Metadata.com.aws.cloudformation.Context block found.; SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiGW45519054", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 50, + "startColumn": 4, + "endLine": 50, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ApiGWANYD1FA3A5F", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 163, + "startColumn": 4, + "endLine": 163, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWAccountF46C4EC5", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 105, + "startColumn": 4, + "endLine": 105, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWCloudWatchRole51A9A431", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 86, + "startColumn": 4, + "endLine": 86, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWDeployment621CA0B04c89657aa92ebebc2018c4cd4a761ecd", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 122, + "startColumn": 4, + "endLine": 122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWDeploymentStageprodDFD8EC11", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWexampleDE4620AC", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 181, + "startColumn": 4, + "endLine": 181, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ApiGWexamplePOST6CAE6201", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 253, + "startColumn": 4, + "endLine": 253, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestAPIRoleA3B4EFA3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 41, + "startColumn": 4, + "endLine": 41, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSQueue7674CD17", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 7, + "startColumn": 4, + "endLine": 7, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSTriggerLambda99F71FB3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 348, + "startColumn": 4, + "endLine": 348, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSTriggerLambdaServiceRole0C427DE8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 287, + "startColumn": 4, + "endLine": 287, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSTriggerLambdaServiceRoleDefaultPolicyB9CC6FE7", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 322, + "startColumn": 4, + "endLine": 322, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SQSTriggerLambdaSqsEventSourceApiSqsLambdaStackSQSQueue975096D28FB9A750", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 368, + "startColumn": 4, + "endLine": 368, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -167195,7 +209237,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 23, "debug": 0 }, @@ -167290,6 +209332,268 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (18 resource(s)): CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF: No Metadata.com.aws.cloudformation.Context block found.; alleventsbyuserIdquery: No Metadata.com.aws.cloudformation.Context block found.; gluecrawlerroleB13EEB29: No Metadata.com.aws.cloudformation.Context block found.; logauditingworkgroup: No Metadata.com.aws.cloudformation.Context block found.; logdatabase: No Metadata.com.aws.cloudformation.Context block found.; logsbucketAutoDeleteObjectsCustomResource3C028C9B: No Metadata.com.aws.cloudformation.Context block found.; logsbucketE18563D9: No Metadata.com.aws.cloudformation.Context block found.; logsbucketPolicy6C60198C: No Metadata.com.aws.cloudformation.Context block found.; logscrawler: No Metadata.com.aws.cloudformation.Context block found.; producteventsbydatequery: No Metadata.com.aws.cloudformation.Context block found.; queryoutputbucket3DDDB997: No Metadata.com.aws.cloudformation.Context block found.; queryoutputbucketAutoDeleteObjectsCustomResourceC8B08262: No Metadata.com.aws.cloudformation.Context block found.; queryoutputbucketPolicy2BC02580: No Metadata.com.aws.cloudformation.Context block found.; samplefilesAwsCliLayerCFFFB375: No Metadata.com.aws.cloudformation.Context block found.; samplefilesCustomResource69AB24CB: No Metadata.com.aws.cloudformation.Context block found.; usereventsbydatequery: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 515, + "startColumn": 4, + "endLine": 515, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 375, + "startColumn": 4, + "endLine": 375, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 472, + "startColumn": 4, + "endLine": 472, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "alleventsbyuserIdquery", + "resourceType": "AWS::Athena::NamedQuery" + }, + "location": { + "startLine": 689, + "startColumn": 4, + "endLine": 689, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "gluecrawlerroleB13EEB29", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 563, + "startColumn": 4, + "endLine": 563, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logauditingworkgroup", + "resourceType": "AWS::Athena::WorkGroup" + }, + "location": { + "startLine": 644, + "startColumn": 4, + "endLine": 644, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logdatabase", + "resourceType": "AWS::Glue::Database" + }, + "location": { + "startLine": 532, + "startColumn": 4, + "endLine": 532, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logsbucketAutoDeleteObjectsCustomResource3C028C9B", + "resourceType": "Custom::S3AutoDeleteObjects" + }, + "location": { + "startLine": 111, + "startColumn": 4, + "endLine": 111, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logsbucketE18563D9", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 34, + "startColumn": 4, + "endLine": 34, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logsbucketPolicy6C60198C", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 89, + "startColumn": 4, + "endLine": 89, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "logscrawler", + "resourceType": "AWS::Glue::Crawler" + }, + "location": { + "startLine": 611, + "startColumn": 4, + "endLine": 611, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "producteventsbydatequery", + "resourceType": "AWS::Athena::NamedQuery" + }, + "location": { + "startLine": 659, + "startColumn": 4, + "endLine": 659, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "queryoutputbucket3DDDB997", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 208, + "startColumn": 4, + "endLine": 208, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "queryoutputbucketAutoDeleteObjectsCustomResourceC8B08262", + "resourceType": "Custom::S3AutoDeleteObjects" + }, + "location": { + "startLine": 285, + "startColumn": 4, + "endLine": 285, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "queryoutputbucketPolicy2BC02580", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 263, + "startColumn": 4, + "endLine": 263, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "samplefilesAwsCliLayerCFFFB375", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "location": { + "startLine": 300, + "startColumn": 4, + "endLine": 300, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "samplefilesCustomResource69AB24CB", + "resourceType": "Custom::CDKBucketDeployment" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "usereventsbydatequery", + "resourceType": "AWS::Athena::NamedQuery" + }, + "location": { + "startLine": 674, + "startColumn": 4, + "endLine": 674, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -167822,7 +210126,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -167831,6 +210135,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): CDKDataSyncS3AccessRole0C49AEBFA: No Metadata.com.aws.cloudformation.Context block found.; CDKDataSyncS3AccessRole18E349368: No Metadata.com.aws.cloudformation.Context block found.; CDKDataSyncS3Policy034C77CD2: No Metadata.com.aws.cloudformation.Context block found.; CDKDataSyncS3Policy1E7D7BFA5: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CDKDataSyncS3AccessRole0C49AEBFA", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 4, + "endLine": 21, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CDKDataSyncS3AccessRole18E349368", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 85, + "startColumn": 4, + "endLine": 85, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CDKDataSyncS3Policy034C77CD2", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CDKDataSyncS3Policy1E7D7BFA5", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 127, + "startColumn": 4, + "endLine": 127, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -168020,7 +210404,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 7, "debug": 0 }, @@ -168067,6 +210451,73 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DataSyncS3Location0: No Metadata.com.aws.cloudformation.Context block found.; DataSyncS3Location1: No Metadata.com.aws.cloudformation.Context block found.; DataSyncS3toS3Task: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DataSyncS3Location0", + "entityType": "Resource", + "resourceType": "AWS::DataSync::LocationS3" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 4, + "endLine": 14, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "DataSyncS3Location1", + "resourceType": "AWS::DataSync::LocationS3" + }, + "location": { + "startLine": 30, + "startColumn": 4, + "endLine": 30, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DataSyncS3toS3Task", + "resourceType": "AWS::DataSync::Task" + }, + "location": { + "startLine": 50, + "startColumn": 4, + "endLine": 50, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -168232,7 +210683,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 38, "debug": 0 }, @@ -168260,6 +210711,190 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): ALBAEE750D2: No Metadata.com.aws.cloudformation.Context block found.; ALBListener3B99FF85: No Metadata.com.aws.cloudformation.Context block found.; ALBListenerTargetGroupD5D64FBA: No Metadata.com.aws.cloudformation.Context block found.; appasgASGE5B53758: No Metadata.com.aws.cloudformation.Context block found.; appasgInstanceProfile55323240: No Metadata.com.aws.cloudformation.Context block found.; appasgInstanceRole38B934E7: No Metadata.com.aws.cloudformation.Context block found.; appasgInstanceSecurityGroup8B8185FA: No Metadata.com.aws.cloudformation.Context block found.; appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D: No Metadata.com.aws.cloudformation.Context block found.; appasgLaunchConfig9EFFB3A3: No Metadata.com.aws.cloudformation.Context block found.; sgalbE4BDB11E: No Metadata.com.aws.cloudformation.Context block found.; sgnextcloud40AB2A88: No Metadata.com.aws.cloudformation.Context block found.; sgnextcloudfromASGStacksgalb85F275898080011A1DCA: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ALBAEE750D2", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 275, + "startColumn": 4, + "endLine": 275, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ALBListener3B99FF85", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ALBListenerTargetGroupD5D64FBA", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgASGE5B53758", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 161, + "startColumn": 4, + "endLine": 161, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgInstanceProfile55323240", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 87, + "startColumn": 4, + "endLine": 87, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgInstanceRole38B934E7", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 74, + "startColumn": 4, + "endLine": 74, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgInstanceSecurityGroup8B8185FA", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 24, + "startColumn": 4, + "endLine": 24, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgInstanceSecurityGroupfromASGStacksgalb85F2758980805783DB9D", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 48, + "startColumn": 4, + "endLine": 48, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "appasgLaunchConfig9EFFB3A3", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 123, + "startColumn": 4, + "endLine": 123, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sgalbE4BDB11E", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 243, + "startColumn": 4, + "endLine": 243, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sgnextcloud40AB2A88", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 190, + "startColumn": 4, + "endLine": 190, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sgnextcloudfromASGStacksgalb85F275898080011A1DCA", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 214, + "startColumn": 4, + "endLine": 214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -169127,7 +211762,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 37, "debug": 0 }, @@ -169136,6 +211771,307 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (21 resource(s)): TheVPC92636AB0: No Metadata.com.aws.cloudformation.Context block found.; TheVPCIGWFA25CC08: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet1DefaultRouteD1B9E467: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet1RouteTableF6513BC2: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet1Subnet571D3690: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet2DefaultRoute52A1F245: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet2RouteTable9AC81FAC: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet2RouteTableAssociation336D47D1: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPrivateSubnet2SubnetCC3D7013: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1DefaultRoute6D26543F: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1EIP4412F690: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1NATGatewayC61D892B: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1RouteTable17DA183D: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1RouteTableAssociationE5186D77: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet1Subnet770D4FF2: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet2DefaultRouteFEB062B2: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet2RouteTable3609F42C: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet2RouteTableAssociationB4B0A733: No Metadata.com.aws.cloudformation.Context block found.; TheVPCPublicSubnet2Subnet73F96DA9: No Metadata.com.aws.cloudformation.Context block found.; TheVPCVPCGWC9B93E30: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TheVPC92636AB0", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "TheVPCIGWFA25CC08", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 403, + "startColumn": 4, + "endLine": 403, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet1DefaultRouteD1B9E467", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 308, + "startColumn": 4, + "endLine": 308, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet1RouteTableAssociation46F1FFFC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 293, + "startColumn": 4, + "endLine": 293, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet1RouteTableF6513BC2", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 279, + "startColumn": 4, + "endLine": 279, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet1Subnet571D3690", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 262, + "startColumn": 4, + "endLine": 262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet2DefaultRoute52A1F245", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 389, + "startColumn": 4, + "endLine": 389, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet2RouteTable9AC81FAC", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 360, + "startColumn": 4, + "endLine": 360, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet2RouteTableAssociation336D47D1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 374, + "startColumn": 4, + "endLine": 374, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPrivateSubnet2SubnetCC3D7013", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 343, + "startColumn": 4, + "endLine": 343, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1DefaultRoute6D26543F", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1EIP4412F690", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1NATGatewayC61D892B", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1RouteTable17DA183D", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1RouteTableAssociationE5186D77", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet1Subnet770D4FF2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet2DefaultRouteFEB062B2", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet2RouteTable3609F42C", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet2RouteTableAssociationB4B0A733", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCPublicSubnet2Subnet73F96DA9", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TheVPCVPCGWC9B93E30", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 417, + "startColumn": 4, + "endLine": 417, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -170032,7 +212968,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 13, "debug": 0 }, @@ -170080,6 +213016,99 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): RDSE0E96D00: No Metadata.com.aws.cloudformation.Context block found.; RDSSecret3683CA93: No Metadata.com.aws.cloudformation.Context block found.; RDSSecretAttachment39FC3A79: No Metadata.com.aws.cloudformation.Context block found.; RDSSubnetGroup3527AC04: No Metadata.com.aws.cloudformation.Context block found.; sgrds6871B7A8: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "RDSE0E96D00", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 139, + "startColumn": 4, + "endLine": 139, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "RDSSecret3683CA93", + "resourceType": "AWS::SecretsManager::Secret" + }, + "location": { + "startLine": 72, + "startColumn": 4, + "endLine": 72, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RDSSecretAttachment39FC3A79", + "resourceType": "AWS::SecretsManager::SecretTargetAttachment" + }, + "location": { + "startLine": 87, + "startColumn": 4, + "endLine": 87, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RDSSubnetGroup3527AC04", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 45, + "startColumn": 4, + "endLine": 45, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sgrds6871B7A8", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -170360,7 +213389,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 7, "debug": 0 }, @@ -170369,6 +213398,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): efsstorage: No Metadata.com.aws.cloudformation.Context block found.; sgefs8B17F90D: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "efsstorage", + "entityType": "Resource", + "resourceType": "AWS::EFS::FileSystem" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 4, + "endLine": 8, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "sgefs8B17F90D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 37, + "startColumn": 4, + "endLine": 37, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -170526,7 +213609,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 2, + "warnings": 4, "informational": 15, "debug": 0 }, @@ -170621,6 +213704,164 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): consumerlambdafunction40710347: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdafunctionServiceRole116B0746: No Metadata.com.aws.cloudformation.Context block found.; consumerlambdafunctionServiceRoleDefaultPolicy3D6F3025: No Metadata.com.aws.cloudformation.Context block found.; demotable002BE91A: No Metadata.com.aws.cloudformation.Context block found.; oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909: No Metadata.com.aws.cloudformation.Context block found.; oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604: No Metadata.com.aws.cloudformation.Context block found.; oneminuteruleE9168CE5: No Metadata.com.aws.cloudformation.Context block found.; producerlambdafunctionCE724CE7: No Metadata.com.aws.cloudformation.Context block found.; producerlambdafunctionServiceRole5400FE21: No Metadata.com.aws.cloudformation.Context block found.; producerlambdafunctionServiceRoleDefaultPolicy727DC938: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "consumerlambdafunction40710347", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 252, + "startColumn": 4, + "endLine": 252, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "consumerlambdafunctionServiceRole116B0746", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 166, + "startColumn": 4, + "endLine": 166, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "consumerlambdafunctionServiceRoleDefaultPolicy3D6F3025", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 219, + "startColumn": 4, + "endLine": 219, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "demotable002BE91A", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "oneminuteruleAllowEventRuledynamodblambdaconsumerlambdafunction1EF0C7D6888AA909", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 329, + "startColumn": 4, + "endLine": 329, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "oneminuteruleAllowEventRuledynamodblambdaproducerlambdafunction1E7146624783D604", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 307, + "startColumn": 4, + "endLine": 307, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "oneminuteruleE9168CE5", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 285, + "startColumn": 4, + "endLine": 285, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "producerlambdafunctionCE724CE7", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 129, + "startColumn": 4, + "endLine": 129, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "producerlambdafunctionServiceRole5400FE21", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 4, + "endLine": 59, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "producerlambdafunctionServiceRoleDefaultPolicy727DC938", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 96, + "startColumn": 4, + "endLine": 96, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -170954,7 +214195,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 3, + "warnings": 5, "informational": 74, "debug": 0 }, @@ -171042,6 +214283,580 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (42 resource(s)): AWSBackupPlanD181A800: No Metadata.com.aws.cloudformation.Context block found.; AWSBackupPlanSelectionAF95B30F: No Metadata.com.aws.cloudformation.Context block found.; AWSBackupPlanSelectionRole2A44F724: No Metadata.com.aws.cloudformation.Context block found.; AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620: No Metadata.com.aws.cloudformation.Context block found.; AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50: No Metadata.com.aws.cloudformation.Context block found.; AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRoleDefaultPolicy4D43A7C1: No Metadata.com.aws.cloudformation.Context block found.; BackupVault3A9C5852: No Metadata.com.aws.cloudformation.Context block found.; BastionHost30F9ED05: No Metadata.com.aws.cloudformation.Context block found.; BastionHostInstanceProfile770FCA07: No Metadata.com.aws.cloudformation.Context block found.; BastionHostInstanceRoleDD3FA5F1: No Metadata.com.aws.cloudformation.Context block found.; BastionHostInstanceRoleDefaultPolicy17347525: No Metadata.com.aws.cloudformation.Context block found.; BastionHostInstanceSecurityGroupE75D4274: No Metadata.com.aws.cloudformation.Context block found.; ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B: No Metadata.com.aws.cloudformation.Context block found.; ScheduleRuleDA5BD877: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroupDD263621: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKAC02ED99: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKIGW52BF7733: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet1DefaultRoute3081953E: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet1RouteTableB5578A45: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet1SubnetE081A3F6: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet2DefaultRoute0D482744: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet2RouteTable5CB16C6C: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPrivateSubnet2Subnet6D9A025D: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1EIP637D1D3D: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1NATGateway291FE40B: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1RouteTable0BDD81D8: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1RouteTableAssociation616E7197: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet1SubnetE7F939D2: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2DefaultRouteC022B913: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2EIP09D8D9CE: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2NATGateway3450887A: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2RouteTableF7A722BD: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKPublicSubnet2SubnetBDC76372: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKS3EndpointF02E5219: No Metadata.com.aws.cloudformation.Context block found.; VpcFromCDKVPCGW6C4E6589: No Metadata.com.aws.cloudformation.Context block found.; WebInstanceF774E10D: No Metadata.com.aws.cloudformation.Context block found.; WebInstanceInstanceProfile57246EB7: No Metadata.com.aws.cloudformation.Context block found.; WebInstanceInstanceRole533376B2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AWSBackupPlanD181A800", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupPlan" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 970, + "startColumn": 4, + "endLine": 970, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "AWSBackupPlanSelectionAF95B30F", + "resourceType": "AWS::Backup::BackupSelection" + }, + "location": { + "startLine": 1059, + "startColumn": 4, + "endLine": 1059, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AWSBackupPlanSelectionRole2A44F724", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1004, + "startColumn": 4, + "endLine": 1004, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AWSb4cf1abd4e4f4bc699441af7ccd9ec371511E620", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 929, + "startColumn": 4, + "endLine": 929, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRole9FFE9C50", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 877, + "startColumn": 4, + "endLine": 877, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AWSb4cf1abd4e4f4bc699441af7ccd9ec37ServiceRoleDefaultPolicy4D43A7C1", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 901, + "startColumn": 4, + "endLine": 901, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BackupVault3A9C5852", + "resourceType": "AWS::Backup::BackupVault" + }, + "location": { + "startLine": 943, + "startColumn": 4, + "endLine": 943, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BastionHost30F9ED05", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 645, + "startColumn": 4, + "endLine": 645, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BastionHostInstanceProfile770FCA07", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 598, + "startColumn": 4, + "endLine": 598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BastionHostInstanceRoleDD3FA5F1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 557, + "startColumn": 4, + "endLine": 557, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BastionHostInstanceRoleDefaultPolicy17347525", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 585, + "startColumn": 4, + "endLine": 585, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BastionHostInstanceSecurityGroupE75D4274", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 531, + "startColumn": 4, + "endLine": 531, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ScheduleRuleAllowEventRuleec2cloudwatchScheduleRuleScheduleRuleTarget0Handler5EF9EBA726A6C94B", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 843, + "startColumn": 4, + "endLine": 843, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ScheduleRuleDA5BD877", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 821, + "startColumn": 4, + "endLine": 821, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroupDD263621", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 688, + "startColumn": 4, + "endLine": 688, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKAC02ED99", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKIGW52BF7733", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet1DefaultRoute3081953E", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet1RouteTableAssociation7F2E7FF7", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet1RouteTableB5578A45", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet1SubnetE081A3F6", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet2DefaultRoute0D482744", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet2RouteTable5CB16C6C", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet2RouteTableAssociation68ADF807", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPrivateSubnet2Subnet6D9A025D", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1DefaultRoute1FF73EA6", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1EIP637D1D3D", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1NATGateway291FE40B", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1RouteTable0BDD81D8", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1RouteTableAssociation616E7197", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet1SubnetE7F939D2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2DefaultRouteC022B913", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2EIP09D8D9CE", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2NATGateway3450887A", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2RouteTableAssociation163F9AFA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2RouteTableF7A722BD", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKPublicSubnet2SubnetBDC76372", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKS3EndpointF02E5219", + "resourceType": "AWS::EC2::VPCEndpoint" + }, + "location": { + "startLine": 497, + "startColumn": 4, + "endLine": 497, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcFromCDKVPCGW6C4E6589", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebInstanceF774E10D", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 784, + "startColumn": 4, + "endLine": 784, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebInstanceInstanceProfile57246EB7", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 727, + "startColumn": 4, + "endLine": 727, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebInstanceInstanceRole533376B2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 714, + "startColumn": 4, + "endLine": 714, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -172756,7 +216571,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 43, "debug": 0 }, @@ -172785,6 +216600,372 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (26 resource(s)): EcrStackNestedStackEcrStackNestedStackResource706AA777: No Metadata.com.aws.cloudformation.Context block found.; EcsStackNestedStackEcsStackNestedStackResource48283A58: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCD8B6F71D: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCIGWBCA1B696: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet1RouteTable3887499F: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet1SubnetD04D043D: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPrivateSubnet2Subnet5FF59B97: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1DefaultRoute1092379D: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1EIPB85E54D1: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1RouteTableC0F77754: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet1Subnet2B93B79E: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2EIP04E6F20C: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2RouteTable5A43F858: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCPublicSubnet2Subnet285316DC: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCRestrictDefaultSecurityGroupCustomResource778F5BEC: No Metadata.com.aws.cloudformation.Context block found.; ServiceConnectVPCVPCGW60A84FEA: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "EcrStackNestedStackEcrStackNestedStackResource706AA777", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 624, + "startColumn": 4, + "endLine": 624, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EcsStackNestedStackEcsStackNestedStackResource48283A58", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 685, + "startColumn": 4, + "endLine": 685, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCD8B6F71D", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCIGWBCA1B696", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet1DefaultRouteCFD77CC9", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet1RouteTable3887499F", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet1RouteTableAssociation843B9F02", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet1SubnetD04D043D", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet2DefaultRoute85237B46", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet2RouteTable30EC1F5C", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet2RouteTableAssociationFF89750A", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPrivateSubnet2Subnet5FF59B97", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1DefaultRoute1092379D", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1EIPB85E54D1", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1NATGatewayBD9137E7", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1RouteTableAssociation902A4A27", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1RouteTableC0F77754", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet1Subnet2B93B79E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2DefaultRoute5E2EBF45", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2EIP04E6F20C", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2NATGatewayCDA3DB43", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2RouteTable5A43F858", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2RouteTableAssociation4EB0B814", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCPublicSubnet2Subnet285316DC", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCRestrictDefaultSecurityGroupCustomResource778F5BEC", + "resourceType": "Custom::VpcRestrictDefaultSG" + }, + "location": { + "startLine": 484, + "startColumn": 4, + "endLine": 484, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceConnectVPCVPCGW60A84FEA", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -173807,7 +217988,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 6, "debug": 0 }, @@ -173836,6 +218017,125 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): BackendDataRepositoryD361813E: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRoleDefaultPolicy280095F8: No Metadata.com.aws.cloudformation.Context block found.; DeployBackendImageCustomResourceF19A1E49: No Metadata.com.aws.cloudformation.Context block found.; DeployFrontendImageCustomResource1B2D2B9F: No Metadata.com.aws.cloudformation.Context block found.; FrontendRepository7D714FA2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BackendDataRepositoryD361813E", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 4, + "endLine": 21, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiB28EAD8E4", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRole8C8B0491", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 98, + "startColumn": 4, + "endLine": 98, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKECRDeploymentbd07c930edb94112a20f03f096f53666512MiBServiceRoleDefaultPolicy280095F8", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 138, + "startColumn": 4, + "endLine": 138, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DeployBackendImageCustomResourceF19A1E49", + "resourceType": "Custom::CDKECRDeployment" + }, + "location": { + "startLine": 213, + "startColumn": 4, + "endLine": 213, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DeployFrontendImageCustomResource1B2D2B9F", + "resourceType": "Custom::CDKECRDeployment" + }, + "location": { + "startLine": 64, + "startColumn": 4, + "endLine": 64, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendRepository7D714FA2", + "resourceType": "AWS::ECR::Repository" + }, + "location": { + "startLine": 10, + "startColumn": 4, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -173973,7 +218273,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 61, "debug": 0 }, @@ -173982,6 +218282,281 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (19 resource(s)): BackendService7A4224EE: No Metadata.com.aws.cloudformation.Context block found.; BackendTaskDefinitionBackendContainerLogGroup5E30F6E8: No Metadata.com.aws.cloudformation.Context block found.; BackendTaskDefinitionEC224DE6: No Metadata.com.aws.cloudformation.Context block found.; ECSCluster7D463CD4: No Metadata.com.aws.cloudformation.Context block found.; ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE: No Metadata.com.aws.cloudformation.Context block found.; ECSSecurityGroupA14DBE7D: No Metadata.com.aws.cloudformation.Context block found.; ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF: No Metadata.com.aws.cloudformation.Context block found.; ECSServiceLogGroupD961AA4E: No Metadata.com.aws.cloudformation.Context block found.; ECSTaskIamRole84EB0A02: No Metadata.com.aws.cloudformation.Context block found.; ECSTaskIamRoleDefaultPolicyCB2CF7F1: No Metadata.com.aws.cloudformation.Context block found.; FrontendLB2FA80AC2: No Metadata.com.aws.cloudformation.Context block found.; FrontendLBListener230479D8: No Metadata.com.aws.cloudformation.Context block found.; FrontendServiceBC94BA93: No Metadata.com.aws.cloudformation.Context block found.; FrontendTaskDefinition6CBC2B00: No Metadata.com.aws.cloudformation.Context block found.; FrontendTaskDefinitionFrontendContainerLogGroup994ED50C: No Metadata.com.aws.cloudformation.Context block found.; ListenerRule73F9AC5E: No Metadata.com.aws.cloudformation.Context block found.; PublicLBSG963B1ACE: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup3D7CD9B8: No Metadata.com.aws.cloudformation.Context block found.; TaskexecutionRole978012CD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BackendService7A4224EE", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 526, + "startColumn": 4, + "endLine": 526, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BackendTaskDefinitionBackendContainerLogGroup5E30F6E8", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 394, + "startColumn": 4, + "endLine": 394, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BackendTaskDefinitionEC224DE6", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 386, + "startColumn": 4, + "endLine": 386, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSCluster7D463CD4", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 22, + "startColumn": 4, + "endLine": 22, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSClusterDefaultServiceDiscoveryNamespace5AC2D2BE", + "resourceType": "AWS::ServiceDiscovery::PrivateDnsNamespace" + }, + "location": { + "startLine": 34, + "startColumn": 4, + "endLine": 34, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSSecurityGroupA14DBE7D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSSecurityGroupfromCdkExamplesServiceConnectStackEcsStackPublicLBSG6A107D2A50006E3540BF", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 266, + "startColumn": 4, + "endLine": 266, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSServiceLogGroupD961AA4E", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSTaskIamRole84EB0A02", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 90, + "startColumn": 4, + "endLine": 90, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ECSTaskIamRoleDefaultPolicyCB2CF7F1", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 166, + "startColumn": 4, + "endLine": 166, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendLB2FA80AC2", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 621, + "startColumn": 4, + "endLine": 621, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendLBListener230479D8", + "resourceType": "AWS::ElasticLoadBalancingV2::Listener" + }, + "location": { + "startLine": 642, + "startColumn": 4, + "endLine": 642, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendServiceBC94BA93", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 466, + "startColumn": 4, + "endLine": 466, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendTaskDefinition6CBC2B00", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 322, + "startColumn": 4, + "endLine": 322, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FrontendTaskDefinitionFrontendContainerLogGroup994ED50C", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 330, + "startColumn": 4, + "endLine": 330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ListenerRule73F9AC5E", + "resourceType": "AWS::ElasticLoadBalancingV2::ListenerRule" + }, + "location": { + "startLine": 672, + "startColumn": 4, + "endLine": 672, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicLBSG963B1ACE", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 554, + "startColumn": 4, + "endLine": 554, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TargetGroup3D7CD9B8", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 585, + "startColumn": 4, + "endLine": 585, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskexecutionRole978012CD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 212, + "startColumn": 4, + "endLine": 212, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -175342,7 +219917,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 33, "debug": 0 }, @@ -175351,6 +219926,229 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (15 resource(s)): emrcluster: No Metadata.com.aws.cloudformation.Context block found.; emrjobflowprofile: No Metadata.com.aws.cloudformation.Context block found.; emrjobflowrole15D4DAE5: No Metadata.com.aws.cloudformation.Context block found.; emrservicerole3BE5EDAF: No Metadata.com.aws.cloudformation.Context block found.; vpcA2121C38: No Metadata.com.aws.cloudformation.Context block found.; vpcIGWE57CBDCA: No Metadata.com.aws.cloudformation.Context block found.; vpcVPCGW7984C166: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet1DefaultRouteF0973989: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet1RouteTableA38152FE: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet1RouteTableAssociationB46101B8: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet1SubnetA635257E: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet2DefaultRoute13685A07: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet2RouteTableA6135437: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet2RouteTableAssociation73F6478A: No Metadata.com.aws.cloudformation.Context block found.; vpcpublicSubnet2Subnet027D165B: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "emrcluster", + "entityType": "Resource", + "resourceType": "AWS::EMR::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 400, + "startColumn": 4, + "endLine": 400, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "emrjobflowprofile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 310, + "startColumn": 4, + "endLine": 310, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "emrjobflowrole15D4DAE5", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 296, + "startColumn": 4, + "endLine": 296, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "emrservicerole3BE5EDAF", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 262, + "startColumn": 4, + "endLine": 262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcA2121C38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcIGWE57CBDCA", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 199, + "startColumn": 4, + "endLine": 199, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcVPCGW7984C166", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 213, + "startColumn": 4, + "endLine": 213, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet1DefaultRouteF0973989", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet1RouteTableA38152FE", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet1RouteTableAssociationB46101B8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet1SubnetA635257E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet2DefaultRoute13685A07", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet2RouteTableA6135437", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 153, + "startColumn": 4, + "endLine": 153, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet2RouteTableAssociation73F6478A", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 167, + "startColumn": 4, + "endLine": 167, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "vpcpublicSubnet2Subnet027D165B", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 136, + "startColumn": 4, + "endLine": 136, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -176112,7 +220910,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 22, "debug": 0 }, @@ -176227,6 +221025,177 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): CdkIoTCoreRule: No Metadata.com.aws.cloudformation.Context block found.; CdkThing001LambdaRoleD7EE5CD3: No Metadata.com.aws.cloudformation.Context block found.; CdkThing001LambdaRoleDefaultPolicy59ADB8C2: No Metadata.com.aws.cloudformation.Context block found.; CdkThing001PolicyPrincipalAttachment: No Metadata.com.aws.cloudformation.Context block found.; CdkThing001ThingPrincipalAttachment: No Metadata.com.aws.cloudformation.Context block found.; CertHandler220363A9: No Metadata.com.aws.cloudformation.Context block found.; CfnLogGroup: No Metadata.com.aws.cloudformation.Context block found.; CfnPolicy: No Metadata.com.aws.cloudformation.Context block found.; CfnRole: No Metadata.com.aws.cloudformation.Context block found.; IoTCertCustomResource: No Metadata.com.aws.cloudformation.Context block found.; MyCdkThing: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CdkIoTCoreRule", + "entityType": "Resource", + "resourceType": "AWS::IoT::TopicRule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 547, + "startColumn": 4, + "endLine": 547, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CdkThing001LambdaRoleD7EE5CD3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CdkThing001LambdaRoleDefaultPolicy59ADB8C2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 63, + "startColumn": 4, + "endLine": 63, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CdkThing001PolicyPrincipalAttachment", + "resourceType": "AWS::IoT::PolicyPrincipalAttachment" + }, + "location": { + "startLine": 440, + "startColumn": 4, + "endLine": 440, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CdkThing001ThingPrincipalAttachment", + "resourceType": "AWS::IoT::ThingPrincipalAttachment" + }, + "location": { + "startLine": 471, + "startColumn": 4, + "endLine": 471, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CertHandler220363A9", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 91, + "startColumn": 4, + "endLine": 91, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CfnLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 522, + "startColumn": 4, + "endLine": 522, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CfnPolicy", + "resourceType": "AWS::IoT::Policy" + }, + "location": { + "startLine": 409, + "startColumn": 4, + "endLine": 409, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CfnRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 512, + "startColumn": 4, + "endLine": 512, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IoTCertCustomResource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "location": { + "startLine": 347, + "startColumn": 4, + "endLine": 347, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyCdkThing", + "resourceType": "AWS::IoT::Thing" + }, + "location": { + "startLine": 8, + "startColumn": 4, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -176699,7 +221668,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -176728,6 +221697,86 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Rule4C995B7F: No Metadata.com.aws.cloudformation.Context block found.; RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7: No Metadata.com.aws.cloudformation.Context block found.; Singleton8C7B99F3: No Metadata.com.aws.cloudformation.Context block found.; SingletonServiceRoleDDD815CD: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Rule4C995B7F", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 77, + "startColumn": 4, + "endLine": 77, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "RuleAllowEventRuleLambdaCronExampleSingleton4F1DF641E5122DD7", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 99, + "startColumn": 4, + "endLine": 99, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Singleton8C7B99F3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SingletonServiceRoleDDD815CD", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -176889,7 +221938,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -176918,6 +221967,60 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): lambdaContainerFunction5815FD88: No Metadata.com.aws.cloudformation.Context block found.; lambdaContainerFunctionServiceRole5E36DB3C: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "lambdaContainerFunction5815FD88", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 66, + "startColumn": 4, + "endLine": 66, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "lambdaContainerFunctionServiceRole5E36DB3C", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -177013,7 +222116,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 5, "debug": 0 }, @@ -177065,6 +222168,73 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): helperlayerC2FA2F58: No Metadata.com.aws.cloudformation.Context block found.; lambdafunction45C982D3: No Metadata.com.aws.cloudformation.Context block found.; lambdafunctionServiceRole85538ADB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "helperlayerC2FA2F58", + "entityType": "Resource", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 4, + "endLine": 21, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "lambdafunction45C982D3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 88, + "startColumn": 4, + "endLine": 88, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "lambdafunctionServiceRole85538ADB", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -177185,7 +222355,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 6, "debug": 0 }, @@ -177300,6 +222470,125 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): StateMachine2E01A3A5: No Metadata.com.aws.cloudformation.Context block found.; StateMachineRoleB840431D: No Metadata.com.aws.cloudformation.Context block found.; StateMachineRoleDefaultPolicyDF1E6607: No Metadata.com.aws.cloudformation.Context block found.; statusLambdaCF47B86D: No Metadata.com.aws.cloudformation.Context block found.; statusLambdaServiceRoleD1132168: No Metadata.com.aws.cloudformation.Context block found.; submitLambda3C32AFD4: No Metadata.com.aws.cloudformation.Context block found.; submitLambdaServiceRole576DCA8F: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine2E01A3A5", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 264, + "startColumn": 4, + "endLine": 264, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "StateMachineRoleB840431D", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StateMachineRoleDefaultPolicyDF1E6607", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 214, + "startColumn": 4, + "endLine": 214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "statusLambdaCF47B86D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 120, + "startColumn": 4, + "endLine": 120, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "statusLambdaServiceRoleD1132168", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 95, + "startColumn": 4, + "endLine": 95, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "submitLambda3C32AFD4", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 58, + "startColumn": 4, + "endLine": 58, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "submitLambdaServiceRole576DCA8F", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -177431,7 +222720,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 3, + "warnings": 5, "informational": 40, "debug": 0 }, @@ -177520,6 +222809,281 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (19 resource(s)): TableCD117FA1: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApi1FE619BE: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiANY5994BD69: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiAccountCF600268: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiCloudWatchRole28577D98: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiDeploymentStageprod9A3CCA44: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiDomain85D0CE65: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiproxy991A3B5C: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiproxyANY05B511A9: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerDomain9F16453F: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerFunctionB5E87AC1: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerFunctionServiceRole2FBF9CDA: No Metadata.com.aws.cloudformation.Context block found.; UrlShortenerFunctionServiceRoleDefaultPolicy7208731A: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TableCD117FA1", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "UrlShortenerApi1FE619BE", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 160, + "startColumn": 4, + "endLine": 160, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiANY5994BD69", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 486, + "startColumn": 4, + "endLine": 486, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYD47A7EFF", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 444, + "startColumn": 4, + "endLine": 444, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYB5D53F00", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 412, + "startColumn": 4, + "endLine": 412, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiAccountCF600268", + "resourceType": "AWS::ApiGateway::Account" + }, + "location": { + "startLine": 215, + "startColumn": 4, + "endLine": 215, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiCloudWatchRole28577D98", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 196, + "startColumn": 4, + "endLine": 196, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiDeployment97FF782966d8a7a27285a49d048d420aab9f3106", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 232, + "startColumn": 4, + "endLine": 232, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiDeploymentStageprod9A3CCA44", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 251, + "startColumn": 4, + "endLine": 251, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiDomain85D0CE65", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 501, + "startColumn": 4, + "endLine": 501, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiDomainMapurlshortappUrlShortenerApiB1BAB0CD7C6BCC1C", + "resourceType": "AWS::ApiGateway::BasePathMapping" + }, + "location": { + "startLine": 518, + "startColumn": 4, + "endLine": 518, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiproxy991A3B5C", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiproxyANY05B511A9", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 376, + "startColumn": 4, + "endLine": 376, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiproxyANYApiPermissionTesturlshortappUrlShortenerApiB1BAB0CDANYproxy1B61094D", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 337, + "startColumn": 4, + "endLine": 337, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerApiproxyANYApiPermissionurlshortappUrlShortenerApiB1BAB0CDANYproxy8ED41C08", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 305, + "startColumn": 4, + "endLine": 305, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerDomain9F16453F", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 543, + "startColumn": 4, + "endLine": 543, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerFunctionB5E87AC1", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 148, + "startColumn": 4, + "endLine": 148, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerFunctionServiceRole2FBF9CDA", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 59, + "startColumn": 4, + "endLine": 59, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UrlShortenerFunctionServiceRoleDefaultPolicy7208731A", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -178428,7 +223992,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 18, "debug": 0 }, @@ -178437,6 +224001,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): generatorPingTask1D3C2E79: No Metadata.com.aws.cloudformation.Context block found.; generatorPingTaskExecutionRoleA7BE7F8B: No Metadata.com.aws.cloudformation.Context block found.; generatorPingTaskExecutionRoleDefaultPolicyA8FF7B68: No Metadata.com.aws.cloudformation.Context block found.; generatorPingTaskTaskRoleA4886BE8: No Metadata.com.aws.cloudformation.Context block found.; generatorcluster9804CB70: No Metadata.com.aws.cloudformation.Context block found.; generatorserviceSecurityGroup3D8BECF8: No Metadata.com.aws.cloudformation.Context block found.; generatorserviceServiceA6AC5079: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "generatorPingTask1D3C2E79", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 67, + "startColumn": 4, + "endLine": 67, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "generatorPingTaskExecutionRoleA7BE7F8B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 87, + "startColumn": 4, + "endLine": 87, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "generatorPingTaskExecutionRoleDefaultPolicyA8FF7B68", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 131, + "startColumn": 4, + "endLine": 131, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "generatorPingTaskTaskRoleA4886BE8", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "generatorcluster9804CB70", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 5, + "startColumn": 4, + "endLine": 5, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "generatorserviceSecurityGroup3D8BECF8", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 198, + "startColumn": 4, + "endLine": 198, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "generatorserviceServiceA6AC5079", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -178843,7 +224526,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 33, "debug": 0 }, @@ -178872,6 +224555,229 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (15 resource(s)): BlockListC03D0423: No Metadata.com.aws.cloudformation.Context block found.; BlockListRuleGroup55F6B55D: No Metadata.com.aws.cloudformation.Context block found.; BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0: No Metadata.com.aws.cloudformation.Context block found.; InboundEndpoint: No Metadata.com.aws.cloudformation.Context block found.; OutboundEndpoint: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPC9B993306: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet1RouteTable6E169019: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet2RouteTable0899A697: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCPrivateSubnet2Subnet495784E7: No Metadata.com.aws.cloudformation.Context block found.; R53ResolverTestVPCRestrictDefaultSecurityGroupCustomResource61006742: No Metadata.com.aws.cloudformation.Context block found.; sginboundendpoint32081788: No Metadata.com.aws.cloudformation.Context block found.; sgoutboundendpointEC0509A3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BlockListC03D0423", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallDomainList" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 288, + "startColumn": 4, + "endLine": 288, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BlockListRuleGroup55F6B55D", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + }, + "location": { + "startLine": 309, + "startColumn": 4, + "endLine": 309, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BlockListRuleGroupDirectBlockListRuleGroupAssociation40E90DB0", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + }, + "location": { + "startLine": 327, + "startColumn": 4, + "endLine": 327, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "InboundEndpoint", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "location": { + "startLine": 493, + "startColumn": 4, + "endLine": 493, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OutboundEndpoint", + "resourceType": "AWS::Route53Resolver::ResolverEndpoint" + }, + "location": { + "startLine": 429, + "startColumn": 4, + "endLine": 429, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPC9B993306", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet1RouteTable6E169019", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet1RouteTableAssociation41B46D9B", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet1Subnet5DBB6B2C", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet2RouteTable0899A697", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 135, + "startColumn": 4, + "endLine": 135, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet2RouteTableAssociation53E27A3B", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 149, + "startColumn": 4, + "endLine": 149, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCPrivateSubnet2Subnet495784E7", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 118, + "startColumn": 4, + "endLine": 118, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "R53ResolverTestVPCRestrictDefaultSecurityGroupCustomResource61006742", + "resourceType": "Custom::VpcRestrictDefaultSG" + }, + "location": { + "startLine": 174, + "startColumn": 4, + "endLine": 174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sginboundendpoint32081788", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 464, + "startColumn": 4, + "endLine": 464, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "sgoutboundendpointEC0509A3", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 400, + "startColumn": 4, + "endLine": 400, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -179625,7 +225531,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 14, "debug": 0 }, @@ -179717,6 +225623,164 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): Bucket83908E77: No Metadata.com.aws.cloudformation.Context block found.; BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A: No Metadata.com.aws.cloudformation.Context block found.; BucketNotifications8F2E257D: No Metadata.com.aws.cloudformation.Context block found.; BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691: No Metadata.com.aws.cloudformation.Context block found.; BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC: No Metadata.com.aws.cloudformation.Context block found.; BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36: No Metadata.com.aws.cloudformation.Context block found.; Classifications0C921F6C: No Metadata.com.aws.cloudformation.Context block found.; RekFunction9837D13D: No Metadata.com.aws.cloudformation.Context block found.; RekFunctionServiceRole3947AEF4: No Metadata.com.aws.cloudformation.Context block found.; RekFunctionServiceRoleDefaultPolicyD393AA84: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket83908E77", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 4, + "endLine": 7, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BucketAllowBucketNotificationsToRekognitionLambdaS3TriggerStackRekFunction8330C87915B3782A", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 121, + "startColumn": 4, + "endLine": 121, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketNotifications8F2E257D", + "resourceType": "Custom::S3BucketNotifications" + }, + "location": { + "startLine": 96, + "startColumn": 4, + "endLine": 96, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 432, + "startColumn": 4, + "endLine": 432, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 378, + "startColumn": 4, + "endLine": 378, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 407, + "startColumn": 4, + "endLine": 407, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Classifications0C921F6C", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 147, + "startColumn": 4, + "endLine": 147, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RekFunction9837D13D", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 316, + "startColumn": 4, + "endLine": 316, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RekFunctionServiceRole3947AEF4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 181, + "startColumn": 4, + "endLine": 181, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RekFunctionServiceRoleDefaultPolicyD393AA84", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 280, + "startColumn": 4, + "endLine": 280, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -180022,7 +226086,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 31, "debug": 0 }, @@ -180179,6 +226243,294 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (20 resource(s)): ASG46ED3070: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceProfile0A2834D7: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceRoleE263A41B: No Metadata.com.aws.cloudformation.Context block found.; ASGInstanceSecurityGroup0525485D: No Metadata.com.aws.cloudformation.Context block found.; ASGLaunchConfigC00AF12B: No Metadata.com.aws.cloudformation.Context block found.; MyBucketF68F3FF0: No Metadata.com.aws.cloudformation.Context block found.; Other34654A52: No Metadata.com.aws.cloudformation.Context block found.; VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCIGWB7E252D3: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1DefaultRouteAE1D6490: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableAssociation347902D1: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1RouteTableBE8A6027: No Metadata.com.aws.cloudformation.Context block found.; VPCPrivateSubnet1Subnet8BCA10E0: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1DefaultRoute91CEF279: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1EIP6AD938E8: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1NATGatewayE0556630: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableAssociation0B0896DC: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1RouteTableFEE4B781: No Metadata.com.aws.cloudformation.Context block found.; VPCPublicSubnet1SubnetB4246D30: No Metadata.com.aws.cloudformation.Context block found.; VPCVPCGW99B986DC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ASG46ED3070", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 455, + "startColumn": 4, + "endLine": 455, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ASGInstanceProfile0A2834D7", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 393, + "startColumn": 4, + "endLine": 393, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceRoleE263A41B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 380, + "startColumn": 4, + "endLine": 380, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGInstanceSecurityGroup0525485D", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 354, + "startColumn": 4, + "endLine": 354, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ASGLaunchConfigC00AF12B", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 425, + "startColumn": 4, + "endLine": 425, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyBucketF68F3FF0", + "resourceType": "AWS::S3::Bucketeer" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Other34654A52", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 7, + "startColumn": 4, + "endLine": 7, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCB9E5F0B4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 94, + "startColumn": 4, + "endLine": 94, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCIGWB7E252D3", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 315, + "startColumn": 4, + "endLine": 315, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1DefaultRouteAE1D6490", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 301, + "startColumn": 4, + "endLine": 301, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableAssociation347902D1", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 286, + "startColumn": 4, + "endLine": 286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1RouteTableBE8A6027", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 272, + "startColumn": 4, + "endLine": 272, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPrivateSubnet1Subnet8BCA10E0", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 255, + "startColumn": 4, + "endLine": 255, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1DefaultRoute91CEF279", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1EIP6AD938E8", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 193, + "startColumn": 4, + "endLine": 193, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1NATGatewayE0556630", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 220, + "startColumn": 4, + "endLine": 220, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableAssociation0B0896DC", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 160, + "startColumn": 4, + "endLine": 160, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1RouteTableFEE4B781", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 146, + "startColumn": 4, + "endLine": 146, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCPublicSubnet1SubnetB4246D30", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 129, + "startColumn": 4, + "endLine": 129, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCVPCGW99B986DC", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 329, + "startColumn": 4, + "endLine": 329, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -180917,7 +227269,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 55, "debug": 0 }, @@ -180926,6 +227278,424 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (30 resource(s)): AllowedDomainList: No Metadata.com.aws.cloudformation.Context block found.; BlockedDomainList: No Metadata.com.aws.cloudformation.Context block found.; DNSFirewallLogGroupF0EEB7D4: No Metadata.com.aws.cloudformation.Context block found.; DNSLogAssoc: No Metadata.com.aws.cloudformation.Context block found.; DNSLogsConfig: No Metadata.com.aws.cloudformation.Context block found.; DNSRuleGroup: No Metadata.com.aws.cloudformation.Context block found.; FirewallRuleGroupAssociation: No Metadata.com.aws.cloudformation.Context block found.; Vpc8378EB38: No Metadata.com.aws.cloudformation.Context block found.; VpcIGWD7BA715C: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1DefaultRouteBE02A9ED: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableAssociation70C59FA6: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1RouteTableB2C5B500: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet1Subnet536B997A: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2DefaultRoute060D2087: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableA678073B: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2RouteTableAssociationA89CAD56: No Metadata.com.aws.cloudformation.Context block found.; VpcPrivateSubnet2Subnet3788AAA1: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1DefaultRoute3DA9E72A: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1EIPD7E02669: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1NATGateway4D7517AA: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTable6C95E38E: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1RouteTableAssociation97140677: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet1Subnet5C2D37C4: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2DefaultRoute97F91067: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2EIP3C605A87: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2NATGateway9182C01D: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTable94F7E489: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2RouteTableAssociationDD5762D8: No Metadata.com.aws.cloudformation.Context block found.; VpcPublicSubnet2Subnet691E08A3: No Metadata.com.aws.cloudformation.Context block found.; VpcVPCGWBF912B6E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedDomainList", + "entityType": "Resource", + "resourceType": "AWS::Route53Resolver::FirewallDomainList" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 512, + "startColumn": 4, + "endLine": 512, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BlockedDomainList", + "resourceType": "AWS::Route53Resolver::FirewallDomainList" + }, + "location": { + "startLine": 525, + "startColumn": 4, + "endLine": 525, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DNSFirewallLogGroupF0EEB7D4", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 471, + "startColumn": 4, + "endLine": 471, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DNSLogAssoc", + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfigAssociation" + }, + "location": { + "startLine": 500, + "startColumn": 4, + "endLine": 500, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DNSLogsConfig", + "resourceType": "AWS::Route53Resolver::ResolverQueryLoggingConfig" + }, + "location": { + "startLine": 486, + "startColumn": 4, + "endLine": 486, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DNSRuleGroup", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroup" + }, + "location": { + "startLine": 551, + "startColumn": 4, + "endLine": 551, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FirewallRuleGroupAssociation", + "resourceType": "AWS::Route53Resolver::FirewallRuleGroupAssociation" + }, + "location": { + "startLine": 567, + "startColumn": 4, + "endLine": 567, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc8378EB38", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 17, + "startColumn": 4, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcIGWD7BA715C", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 445, + "startColumn": 4, + "endLine": 445, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1DefaultRouteBE02A9ED", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 350, + "startColumn": 4, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableAssociation70C59FA6", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1RouteTableB2C5B500", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 321, + "startColumn": 4, + "endLine": 321, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet1Subnet536B997A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 304, + "startColumn": 4, + "endLine": 304, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2DefaultRoute060D2087", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 431, + "startColumn": 4, + "endLine": 431, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableA678073B", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 402, + "startColumn": 4, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2RouteTableAssociationA89CAD56", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 416, + "startColumn": 4, + "endLine": 416, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPrivateSubnet2Subnet3788AAA1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 385, + "startColumn": 4, + "endLine": 385, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1DefaultRoute3DA9E72A", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 101, + "startColumn": 4, + "endLine": 101, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1EIPD7E02669", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 116, + "startColumn": 4, + "endLine": 116, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1NATGateway4D7517AA", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 143, + "startColumn": 4, + "endLine": 143, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTable6C95E38E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 69, + "startColumn": 4, + "endLine": 69, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1RouteTableAssociation97140677", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 83, + "startColumn": 4, + "endLine": 83, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet1Subnet5C2D37C4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 52, + "startColumn": 4, + "endLine": 52, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2DefaultRoute97F91067", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 227, + "startColumn": 4, + "endLine": 227, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2EIP3C605A87", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 242, + "startColumn": 4, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2NATGateway9182C01D", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 269, + "startColumn": 4, + "endLine": 269, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTable94F7E489", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 195, + "startColumn": 4, + "endLine": 195, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2RouteTableAssociationDD5762D8", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 209, + "startColumn": 4, + "endLine": 209, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcPublicSubnet2Subnet691E08A3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 178, + "startColumn": 4, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VpcVPCGWBF912B6E", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 459, + "startColumn": 4, + "endLine": 459, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -182214,7 +228984,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 12, "debug": 0 }, @@ -182289,6 +229059,138 @@ "actualValue": "BucketOwnerFullControl" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): exampleBucketAP: No Metadata.com.aws.cloudformation.Context block found.; examplebucketC9DFA43E: No Metadata.com.aws.cloudformation.Context block found.; examplebucketPolicyE09B485E: No Metadata.com.aws.cloudformation.Context block found.; retrieveTransformedObjectLambdaD5D6532C: No Metadata.com.aws.cloudformation.Context block found.; retrieveTransformedObjectLambdaServiceRole27FF342E: No Metadata.com.aws.cloudformation.Context block found.; retrieveTransformedObjectLambdaServiceRoleDefaultPolicy18E312EA: No Metadata.com.aws.cloudformation.Context block found.; retrieveTransformedObjectLambdainvocationRestrictionD58B0218: No Metadata.com.aws.cloudformation.Context block found.; s3ObjectLambdaAP: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "exampleBucketAP", + "entityType": "Resource", + "resourceType": "AWS::S3::AccessPoint" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 231, + "startColumn": 4, + "endLine": 231, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "examplebucketC9DFA43E", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 25, + "startColumn": 4, + "endLine": 25, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "examplebucketPolicyE09B485E", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 77, + "startColumn": 4, + "endLine": 77, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "retrieveTransformedObjectLambdaD5D6532C", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 161, + "startColumn": 4, + "endLine": 161, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "retrieveTransformedObjectLambdaServiceRole27FF342E", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 111, + "startColumn": 4, + "endLine": 111, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "retrieveTransformedObjectLambdaServiceRoleDefaultPolicy18E312EA", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 135, + "startColumn": 4, + "endLine": 135, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "retrieveTransformedObjectLambdainvocationRestrictionD58B0218", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 185, + "startColumn": 4, + "endLine": 185, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "s3ObjectLambdaAP", + "resourceType": "AWS::S3ObjectLambda::AccessPoint" + }, + "location": { + "startLine": 275, + "startColumn": 4, + "endLine": 275, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -182562,7 +229464,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 28, "debug": 0 }, @@ -182591,6 +229493,216 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (14 resource(s)): DocumentAssociation: No Metadata.com.aws.cloudformation.Context block found.; EC2SSMRole1C0EBD7B: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpc2979FA29: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcIGWAFEB9020: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcRestrictDefaultSecurityGroupCustomResource7FEE11AD: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcVPCGW7C58FC59: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77: No Metadata.com.aws.cloudformation.Context block found.; SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E: No Metadata.com.aws.cloudformation.Context block found.; SSMTestInstanceA55C9969: No Metadata.com.aws.cloudformation.Context block found.; SSMTestInstanceInstanceProfile498EFAB5: No Metadata.com.aws.cloudformation.Context block found.; SSMTestInstanceInstanceSecurityGroup68B5BAFB: No Metadata.com.aws.cloudformation.Context block found.; TimeWriterDocument: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DocumentAssociation", + "entityType": "Resource", + "resourceType": "AWS::SSM::Association" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 64, + "startColumn": 4, + "endLine": 64, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "EC2SSMRole1C0EBD7B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 355, + "startColumn": 4, + "endLine": 355, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpc2979FA29", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 82, + "startColumn": 4, + "endLine": 82, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcIGWAFEB9020", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcRestrictDefaultSecurityGroupCustomResource7FEE11AD", + "resourceType": "Custom::VpcRestrictDefaultSG" + }, + "location": { + "startLine": 219, + "startColumn": 4, + "endLine": 219, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcVPCGW7C58FC59", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 194, + "startColumn": 4, + "endLine": 194, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcpublicSubnet1DefaultRouteE60C709F", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 166, + "startColumn": 4, + "endLine": 166, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcpublicSubnet1RouteTable4C0F352E", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 134, + "startColumn": 4, + "endLine": 134, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcpublicSubnet1RouteTableAssociation3C51BE77", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 148, + "startColumn": 4, + "endLine": 148, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMDocumentTestVpcpublicSubnet1SubnetB0B3C43E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 117, + "startColumn": 4, + "endLine": 117, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMTestInstanceA55C9969", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 447, + "startColumn": 4, + "endLine": 447, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMTestInstanceInstanceProfile498EFAB5", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 397, + "startColumn": 4, + "endLine": 397, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SSMTestInstanceInstanceSecurityGroup68B5BAFB", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 384, + "startColumn": 4, + "endLine": 384, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TimeWriterDocument", + "resourceType": "AWS::SSM::Document" + }, + "location": { + "startLine": 39, + "startColumn": 4, + "endLine": 39, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -183227,7 +230339,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 7, "debug": 0 }, @@ -183276,6 +230388,138 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265: No Metadata.com.aws.cloudformation.Context block found.; CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF: No Metadata.com.aws.cloudformation.Context block found.; StaticSiteBasicDeployWebsiteAwsCliLayer198D4134: No Metadata.com.aws.cloudformation.Context block found.; StaticSiteBasicDeployWebsiteCustomResource6FDD423E: No Metadata.com.aws.cloudformation.Context block found.; StaticSiteBasicWebsiteBucket3BB70B77: No Metadata.com.aws.cloudformation.Context block found.; StaticSiteBasicWebsiteBucketAutoDeleteObjectsCustomResource5B755EF0: No Metadata.com.aws.cloudformation.Context block found.; StaticSiteBasicWebsiteBucketPolicy8E799A1F: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 408, + "startColumn": 4, + "endLine": 408, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 274, + "startColumn": 4, + "endLine": 274, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 371, + "startColumn": 4, + "endLine": 371, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StaticSiteBasicDeployWebsiteAwsCliLayer198D4134", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "location": { + "startLine": 141, + "startColumn": 4, + "endLine": 141, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StaticSiteBasicDeployWebsiteCustomResource6FDD423E", + "resourceType": "Custom::CDKBucketDeployment" + }, + "location": { + "startLine": 174, + "startColumn": 4, + "endLine": 174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StaticSiteBasicWebsiteBucket3BB70B77", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 28, + "startColumn": 4, + "endLine": 28, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StaticSiteBasicWebsiteBucketAutoDeleteObjectsCustomResource5B755EF0", + "resourceType": "Custom::S3AutoDeleteObjects" + }, + "location": { + "startLine": 126, + "startColumn": 4, + "endLine": 126, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StaticSiteBasicWebsiteBucketPolicy8E799A1F", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 104, + "startColumn": 4, + "endLine": 104, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -183436,7 +230680,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 17, "debug": 0 }, @@ -183465,6 +230709,177 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (11 resource(s)): MyStateMachine6C968CA5: No Metadata.com.aws.cloudformation.Context block found.; MyStateMachineLogGroup9955D1FE: No Metadata.com.aws.cloudformation.Context block found.; MyStateMachineRoleD59FFEBC: No Metadata.com.aws.cloudformation.Context block found.; MyStateMachineRoleDefaultPolicyE468EB18: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiDeploymentStageprod5FF8FD8E: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiE896FCA7: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiorders391C1FA5: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiordersGET0318ABB9: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiordersGETStartSyncExecutionRole90998151: No Metadata.com.aws.cloudformation.Context block found.; StepFuncApiordersGETStartSyncExecutionRoleDefaultPolicy90D6133B: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyStateMachine6C968CA5", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 115, + "startColumn": 4, + "endLine": 115, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "MyStateMachineLogGroup9955D1FE", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 11, + "startColumn": 4, + "endLine": 11, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyStateMachineRoleD59FFEBC", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 31, + "startColumn": 4, + "endLine": 31, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyStateMachineRoleDefaultPolicyE468EB18", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 77, + "startColumn": 4, + "endLine": 77, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiDeployment77C863276f473a57d5bd4cb772b382f83651c7a2", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 146, + "startColumn": 4, + "endLine": 146, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiDeploymentStageprod5FF8FD8E", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 162, + "startColumn": 4, + "endLine": 162, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiE896FCA7", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 130, + "startColumn": 4, + "endLine": 130, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiorders391C1FA5", + "resourceType": "AWS::ApiGateway::Resource" + }, + "location": { + "startLine": 180, + "startColumn": 4, + "endLine": 180, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiordersGET0318ABB9", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 325, + "startColumn": 4, + "endLine": 325, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiordersGETStartSyncExecutionRole90998151", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 200, + "startColumn": 4, + "endLine": 200, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StepFuncApiordersGETStartSyncExecutionRoleDefaultPolicy90D6133B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 226, + "startColumn": 4, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -183855,7 +231270,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 8, "debug": 0 }, @@ -183970,6 +231385,164 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): CheckLambda9CBBF9BA: No Metadata.com.aws.cloudformation.Context block found.; CheckLambdaServiceRole74B86E23: No Metadata.com.aws.cloudformation.Context block found.; CronStateMachine7E50955B: No Metadata.com.aws.cloudformation.Context block found.; CronStateMachineEventsRoleA3F136B0: No Metadata.com.aws.cloudformation.Context block found.; CronStateMachineEventsRoleDefaultPolicyCB221FDF: No Metadata.com.aws.cloudformation.Context block found.; CronStateMachineRoleDefaultPolicy427EC0FE: No Metadata.com.aws.cloudformation.Context block found.; CronStateMachineRoleFE85923B: No Metadata.com.aws.cloudformation.Context block found.; Rule4C995B7F: No Metadata.com.aws.cloudformation.Context block found.; SubmitLambda8054545E: No Metadata.com.aws.cloudformation.Context block found.; SubmitLambdaServiceRole98C85C39: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CheckLambda9CBBF9BA", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 56, + "startColumn": 4, + "endLine": 56, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "CheckLambdaServiceRole74B86E23", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 4, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CronStateMachine7E50955B", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 265, + "startColumn": 4, + "endLine": 265, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CronStateMachineEventsRoleA3F136B0", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 285, + "startColumn": 4, + "endLine": 285, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CronStateMachineEventsRoleDefaultPolicyCB221FDF", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 311, + "startColumn": 4, + "endLine": 311, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CronStateMachineRoleDefaultPolicy427EC0FE", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 204, + "startColumn": 4, + "endLine": 204, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CronStateMachineRoleFE85923B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 133, + "startColumn": 4, + "endLine": 133, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Rule4C995B7F", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 335, + "startColumn": 4, + "endLine": 335, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubmitLambda8054545E", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 113, + "startColumn": 4, + "endLine": 113, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubmitLambdaServiceRole98C85C39", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 90, + "startColumn": 4, + "endLine": 90, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -184141,7 +231714,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -184150,6 +231723,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Flow: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Flow", + "entityType": "Resource", + "resourceType": "AWS::MediaConnect::Flow" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -184227,7 +231839,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 9, "debug": 0 }, @@ -184335,6 +231947,73 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyLambda: No Metadata.com.aws.cloudformation.Context block found.; PermissionInvalidAccountId: No Metadata.com.aws.cloudformation.Context block found.; PermissionWithAccountId: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "PermissionInvalidAccountId", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PermissionWithAccountId", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -184544,7 +232223,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -184552,7 +232231,62 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LogGroupFromParameter: No Metadata.com.aws.cloudformation.Context block found.; LogGroupLiteralFloat: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LogGroupFromParameter", + "entityType": "Resource", + "resourceType": "AWS::Logs::LogGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 24, + "relatedResources": [ + { + "resource": { + "id": "LogGroupLiteralFloat", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "gh-issues/issue-186-clb.json": { "filePath": "gh-issues/issue-186-clb.json", @@ -184563,7 +232297,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -184572,6 +232306,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CLBA83A883E: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CLBA83A883E", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -184629,7 +232402,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -184661,6 +232434,45 @@ "actualValue": "Abort" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 2, + "endLine": 13, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ImagePipeline7DDDE57F: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ImagePipeline7DDDE57F", + "entityType": "Resource", + "resourceType": "AWS::ImageBuilder::ImagePipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 25, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -184695,7 +232507,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -184721,6 +232533,45 @@ "endColumn": 12, "ruleDescription": "Parameters have appropriate properties", "phase": "PARSE" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 2, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -184733,7 +232584,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -184786,6 +232637,21 @@ "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -184798,7 +232664,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -184837,6 +232703,60 @@ ] } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): InvertedRangeSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; PingSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "InvertedRangeSecurityGroup", + "entityType": "Resource", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 29, + "relatedResources": [ + { + "resource": { + "id": "PingSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -184932,7 +232852,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 20, + "warnings": 22, "informational": 208, "debug": 0 }, @@ -185389,6 +233309,528 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 1, + "endLine": 23, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (38 resource(s)): AllowedValuesEncryption: No Metadata.com.aws.cloudformation.Context block found.; AuroraAllowedValues: No Metadata.com.aws.cloudformation.Context block found.; AuroraEngine: No Metadata.com.aws.cloudformation.Context block found.; AutomatedBackupRestore: No Metadata.com.aws.cloudformation.Context block found.; Cluster: No Metadata.com.aws.cloudformation.Context block found.; ClusterMember: No Metadata.com.aws.cloudformation.Context block found.; ClusterSnapshotRestore: No Metadata.com.aws.cloudformation.Context block found.; ConditionalClusterOrStandalone: No Metadata.com.aws.cloudformation.Context block found.; ConditionalFalseEncryption: No Metadata.com.aws.cloudformation.Context block found.; ConditionalNoValueEncryption: No Metadata.com.aws.cloudformation.Context block found.; ConditionalSnapshotOrEncryptedStandalone: No Metadata.com.aws.cloudformation.Context block found.; ConditionalTrueEncryption: No Metadata.com.aws.cloudformation.Context block found.; CorrelatedClusterOrEncryptedStandalone: No Metadata.com.aws.cloudformation.Context block found.; CustomFalseEncryption: No Metadata.com.aws.cloudformation.Context block found.; CustomImplicitEncryption: No Metadata.com.aws.cloudformation.Context block found.; CustomStringFalseEncryption: No Metadata.com.aws.cloudformation.Context block found.; CustomTrueEncryption: No Metadata.com.aws.cloudformation.Context block found.; DynamicEncryptionValue: No Metadata.com.aws.cloudformation.Context block found.; DynamicEngineValue: No Metadata.com.aws.cloudformation.Context block found.; DynamicProperties: No Metadata.com.aws.cloudformation.Context block found.; DynamicReferenceEncryption: No Metadata.com.aws.cloudformation.Context block found.; EmptySnapshotIdentifier: No Metadata.com.aws.cloudformation.Context block found.; EncryptedSource: No Metadata.com.aws.cloudformation.Context block found.; EngineAllowedValuesMissingEncryption: No Metadata.com.aws.cloudformation.Context block found.; FalseEncryption: No Metadata.com.aws.cloudformation.Context block found.; InvalidEncryptionValue: No Metadata.com.aws.cloudformation.Context block found.; KmsKeyWithoutEncryption: No Metadata.com.aws.cloudformation.Context block found.; LegacySecurityGroups: No Metadata.com.aws.cloudformation.Context block found.; MissingEncryption: No Metadata.com.aws.cloudformation.Context block found.; SnapshotRestore: No Metadata.com.aws.cloudformation.Context block found.; SourceClusterReplica: No Metadata.com.aws.cloudformation.Context block found.; SourceInstanceReplica: No Metadata.com.aws.cloudformation.Context block found.; SourceResourceRestore: No Metadata.com.aws.cloudformation.Context block found.; StringFalseEncryption: No Metadata.com.aws.cloudformation.Context block found.; StringTrueEncryption: No Metadata.com.aws.cloudformation.Context block found.; TrueEncryption: No Metadata.com.aws.cloudformation.Context block found.; WholePropertiesCorrelated: No Metadata.com.aws.cloudformation.Context block found.; WholePropertiesFalseEncryption: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AllowedValuesEncryption", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 26, + "relatedResources": [ + { + "resource": { + "id": "AuroraAllowedValues", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AuroraEngine", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 135, + "startColumn": 3, + "endLine": 135, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AutomatedBackupRestore", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 187, + "startColumn": 3, + "endLine": 187, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Cluster", + "resourceType": "AWS::RDS::DBCluster" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterMember", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterSnapshotRestore", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 163, + "startColumn": 3, + "endLine": 163, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalClusterOrStandalone", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalFalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalNoValueEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalSnapshotOrEncryptedStandalone", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 223, + "startColumn": 3, + "endLine": 223, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConditionalTrueEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CorrelatedClusterOrEncryptedStandalone", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomFalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomImplicitEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 199, + "startColumn": 3, + "endLine": 199, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomStringFalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomTrueEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamicEncryptionValue", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamicEngineValue", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamicProperties", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamicReferenceEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EmptySnapshotIdentifier", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 157, + "startColumn": 3, + "endLine": 157, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EncryptedSource", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 169, + "startColumn": 3, + "endLine": 169, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EngineAllowedValuesMissingEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "InvalidEncryptionValue", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KmsKeyWithoutEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LegacySecurityGroups", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MissingEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SnapshotRestore", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SourceClusterReplica", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SourceInstanceReplica", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 175, + "startColumn": 3, + "endLine": 175, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SourceResourceRestore", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StringFalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StringTrueEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TrueEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WholePropertiesCorrelated", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WholePropertiesFalseEncryption", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 239, + "startColumn": 3, + "endLine": 239, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -189592,7 +238034,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -189601,6 +238043,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Distribution: No Metadata.com.aws.cloudformation.Context block found.; HttpsAlias: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "HttpsAlias", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -189676,7 +238172,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -189685,6 +238181,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ALB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ALB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -189739,7 +238274,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 16, "debug": 0 }, @@ -189748,6 +238283,151 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): AGetAtt: No Metadata.com.aws.cloudformation.Context block found.; AResourceRef: No Metadata.com.aws.cloudformation.Context block found.; AaaaGetAtt: No Metadata.com.aws.cloudformation.Context block found.; CaaGetAtt: No Metadata.com.aws.cloudformation.Context block found.; DynamicParameter: No Metadata.com.aws.cloudformation.Context block found.; EIP: No Metadata.com.aws.cloudformation.Context block found.; Group: No Metadata.com.aws.cloudformation.Context block found.; MxGetAtt: No Metadata.com.aws.cloudformation.Context block found.; TxtGetAtt: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AGetAtt", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "AResourceRef", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "AaaaGetAtt", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CaaGetAtt", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DynamicParameter", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 63, + "startColumn": 3, + "endLine": 63, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Group", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MxGetAtt", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TxtGetAtt", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190109,7 +238789,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -190135,6 +238815,45 @@ "endColumn": 20, "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): NotAnImageSlot: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NotAnImageSlot", + "entityType": "Resource", + "resourceType": "Custom::Thing" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -190147,7 +238866,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -190174,6 +238893,60 @@ "ruleDescription": "Check if ImageId Parameters have the correct type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.; Instance2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "Instance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 20, + "startColumn": 5, + "endLine": 20, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190326,7 +239099,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -190335,6 +239108,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ScheduledRule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ScheduledRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -190366,7 +239178,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -190412,6 +239224,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190466,7 +239317,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -190513,6 +239364,60 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyAsg: No Metadata.com.aws.cloudformation.Context block found.; MyLaunchConfig: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyAsg", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "MyLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190613,7 +239518,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -190622,6 +239527,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Memory: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Memory", + "entityType": "Resource", + "resourceType": "AWS::BedrockAgentCore::Memory" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190675,7 +239619,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -190684,6 +239628,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): VPCB9E5F0B4: No Metadata.com.aws.cloudformation.Context block found.; VPCEcrEndpointSecurityGroup50ED8BA4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "VPCB9E5F0B4", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "VPCEcrEndpointSecurityGroup50ED8BA4", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 9, + "startColumn": 5, + "endLine": 9, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -190802,7 +239800,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 4, + "warnings": 6, "informational": 10, "debug": 0 }, @@ -190906,6 +239904,73 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DaxConcrete: No Metadata.com.aws.cloudformation.Context block found.; DaxRef: No Metadata.com.aws.cloudformation.Context block found.; EksCluster: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DaxConcrete", + "entityType": "Resource", + "resourceType": "AWS::DAX::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "DaxRef", + "resourceType": "AWS::DAX::Cluster" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EksCluster", + "resourceType": "AWS::EKS::Cluster" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -191120,7 +240185,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -191152,6 +240217,45 @@ "lifecycle": "deprecated" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -191224,7 +240328,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 9, "debug": 0 }, @@ -191267,6 +240371,73 @@ "ruleDescription": "ELB target group health check uses a fixed port that will not follow an ECS dynamic host port", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -191472,7 +240643,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -191481,6 +240652,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -191686,7 +240924,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 10, "debug": 0 }, @@ -191695,6 +240933,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TargetGroup: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TargetGroup", + "resourceType": "AWS::ElasticLoadBalancingV2::TargetGroup" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3049", "severity": "INFO", @@ -191934,7 +241239,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -191963,6 +241268,60 @@ "ruleDescription": "Exactly one of properties required (requiredXor)", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Pipeline: No Metadata.com.aws.cloudformation.Context block found.; PipelineRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "PipelineRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 47, + "startColumn": 5, + "endLine": 47, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -192014,7 +241373,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -192023,6 +241382,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): interfaceVpcEndpoint89C99945: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "interfaceVpcEndpoint89C99945", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPCEndpoint" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 34, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -192120,7 +241518,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 3, "debug": 0 }, @@ -192184,6 +241582,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ClusterEB0386A7: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ClusterEB0386A7", + "entityType": "Resource", + "resourceType": "AWS::EKS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 21, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -192258,7 +241695,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -192380,6 +241817,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -192433,7 +241909,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 11, "debug": 0 }, @@ -192499,6 +241975,73 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DocDbInstance: No Metadata.com.aws.cloudformation.Context block found.; Ec2Instance: No Metadata.com.aws.cloudformation.Context block found.; EsDomain: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DocDbInstance", + "entityType": "Resource", + "resourceType": "AWS::DocDB::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "Ec2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EsDomain", + "resourceType": "AWS::Elasticsearch::Domain" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -192719,7 +242262,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -192728,6 +242271,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyFunctionServiceRole: No Metadata.com.aws.cloudformation.Context block found.; MyFunctionServiceRoleDefaultPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFunctionServiceRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 5, + "endLine": 6, + "endColumn": 27, + "relatedResources": [ + { + "resource": { + "id": "MyFunctionServiceRoleDefaultPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 40 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -192759,7 +242356,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -192786,6 +242383,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Nodegroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Nodegroup", + "entityType": "Resource", + "resourceType": "AWS::EKS::Nodegroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -192886,7 +242522,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 6, + "warnings": 8, "informational": 68, "debug": 0 }, @@ -193053,6 +242689,489 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 2, + "endLine": 2, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (35 resource(s)): Cluster9EE0221C: No Metadata.com.aws.cloudformation.Context block found.; ClusterAwsAuthmanifestFE51F8AE: No Metadata.com.aws.cloudformation.Context block found.; ClusterControlPlaneSecurityGroupD274242C: No Metadata.com.aws.cloudformation.Context block found.; ClusterCreationRole360249B6: No Metadata.com.aws.cloudformation.Context block found.; ClusterCreationRoleDefaultPolicyE8BDFC7B: No Metadata.com.aws.cloudformation.Context block found.; ClusterKubectlHandlerRole94549F93: No Metadata.com.aws.cloudformation.Context block found.; ClusterKubectlHandlerRoleDefaultPolicyE44083DD: No Metadata.com.aws.cloudformation.Context block found.; ClusterKubectlReadyBarrier200052AF: No Metadata.com.aws.cloudformation.Context block found.; ClusterNodegroupDefaultCapacityDA0920A3: No Metadata.com.aws.cloudformation.Context block found.; ClusterNodegroupDefaultCapacityNodeGroupRole55953B04: No Metadata.com.aws.cloudformation.Context block found.; KubectlLayer600207B5: No Metadata.com.aws.cloudformation.Context block found.; UserRoleB7C3739B: No Metadata.com.aws.cloudformation.Context block found.; UserVpcFAC913E5: No Metadata.com.aws.cloudformation.Context block found.; UserVpcIGW2437F24B: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet1DefaultRouteB00E5F42: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet1RouteTable886260DA: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet1Subnet0B127D2C: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet2DefaultRoute99CA0CB9: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet2RouteTable1EDE83AC: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet2RouteTableAssociation1643AB72: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPrivateSubnet2SubnetCD612986: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1DefaultRoute321532E0: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1EIP84E63864: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1NATGateway7AFB18E6: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1RouteTable5F0A6273: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1RouteTableAssociation2AB88B08: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet1Subnet7A3A7B5D: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2DefaultRouteE14C718B: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2EIPE859723C: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2NATGateway5AD59565: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2RouteTableAssociationF7485C52: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2RouteTableEC6A2C2A: No Metadata.com.aws.cloudformation.Context block found.; UserVpcPublicSubnet2Subnet42A6D42E: No Metadata.com.aws.cloudformation.Context block found.; UserVpcVPCGWEFD8AF3B: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster9EE0221C", + "entityType": "Resource", + "resourceType": "Custom::AWSCDK-EKS-Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 793, + "startColumn": 3, + "endLine": 793, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "ClusterAwsAuthmanifestFE51F8AE", + "resourceType": "Custom::AWSCDK-EKS-KubernetesResource" + }, + "location": { + "startLine": 991, + "startColumn": 3, + "endLine": 991, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterControlPlaneSecurityGroupD274242C", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 593, + "startColumn": 3, + "endLine": 593, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterCreationRole360249B6", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterCreationRoleDefaultPolicyE8BDFC7B", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 688, + "startColumn": 3, + "endLine": 688, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterKubectlHandlerRole94549F93", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterKubectlHandlerRoleDefaultPolicyE44083DD", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 552, + "startColumn": 3, + "endLine": 552, + "endColumn": 50 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterKubectlReadyBarrier200052AF", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterNodegroupDefaultCapacityDA0920A3", + "resourceType": "AWS::EKS::Nodegroup" + }, + "location": { + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ClusterNodegroupDefaultCapacityNodeGroupRole55953B04", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 56 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KubectlLayer600207B5", + "resourceType": "AWS::Lambda::LayerVersion" + }, + "location": { + "startLine": 459, + "startColumn": 3, + "endLine": 459, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserRoleB7C3739B", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcFAC913E5", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcIGW2437F24B", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 420, + "startColumn": 3, + "endLine": 420, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet1DefaultRouteB00E5F42", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 331, + "startColumn": 3, + "endLine": 331, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet1RouteTable886260DA", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet1RouteTableAssociation0C8C18D3", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 320, + "startColumn": 3, + "endLine": 320, + "endColumn": 54 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet1Subnet0B127D2C", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet2DefaultRoute99CA0CB9", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 408, + "startColumn": 3, + "endLine": 408, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet2RouteTable1EDE83AC", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 379, + "startColumn": 3, + "endLine": 379, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet2RouteTableAssociation1643AB72", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 397, + "startColumn": 3, + "endLine": 397, + "endColumn": 54 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPrivateSubnet2SubnetCD612986", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 343, + "startColumn": 3, + "endLine": 343, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1DefaultRoute321532E0", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 83, + "startColumn": 3, + "endLine": 83, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1EIP84E63864", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 98, + "startColumn": 3, + "endLine": 98, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1NATGateway7AFB18E6", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 114, + "startColumn": 3, + "endLine": 114, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1RouteTable5F0A6273", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1RouteTableAssociation2AB88B08", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 53 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet1Subnet7A3A7B5D", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2DefaultRouteE14C718B", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 207, + "startColumn": 3, + "endLine": 207, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2EIPE859723C", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 222, + "startColumn": 3, + "endLine": 222, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2NATGateway5AD59565", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 238, + "startColumn": 3, + "endLine": 238, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2RouteTableAssociationF7485C52", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 196, + "startColumn": 3, + "endLine": 196, + "endColumn": 53 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2RouteTableEC6A2C2A", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 178, + "startColumn": 3, + "endLine": 178, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcPublicSubnet2Subnet42A6D42E", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UserVpcVPCGWEFD8AF3B", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 431, + "startColumn": 3, + "endLine": 431, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -194596,7 +244715,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -194605,6 +244724,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -194636,7 +244794,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -194668,6 +244826,45 @@ "actualValue": "PublicRead" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -194699,7 +244896,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -194751,6 +244948,45 @@ "actualValue": "PublicRead" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -194782,7 +245018,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -194791,6 +245027,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -194822,7 +245097,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -194831,6 +245106,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): WeakConsumer: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "WeakConsumer", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 18, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -194886,7 +245200,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -194895,6 +245209,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AReallyAwesomeDistributionWithAMemorableNameThatIWillNeverForget046C0FA9", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 78, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -194926,7 +245279,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -194955,6 +245308,45 @@ "ruleDescription": "Value not valid under anyOf", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Resource: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Resource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Volume" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -195022,7 +245414,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 3, "debug": 0 }, @@ -195095,6 +245487,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Canary: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Canary", + "entityType": "Resource", + "resourceType": "AWS::Synthetics::Canary" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -195168,7 +245599,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -195195,6 +245626,45 @@ "ruleDescription": "Parameters have appropriate properties", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 27, + "startColumn": 5, + "endLine": 27, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -195226,7 +245696,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -195276,6 +245746,60 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyLambda: No Metadata.com.aws.cloudformation.Context block found.; S3Permission: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyLambda", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "S3Permission", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 15, + "startColumn": 5, + "endLine": 15, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -195418,7 +245942,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -195427,6 +245951,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): PromAlarm: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "PromAlarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 5, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -195481,7 +246044,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 4, + "warnings": 6, "informational": 4, "debug": 0 }, @@ -195698,6 +246261,60 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): FutureNodeFunc: No Metadata.com.aws.cloudformation.Context block found.; MyFunc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "FutureNodeFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 5, + "endLine": 16, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "MyFunc", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -195793,7 +246410,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -195852,6 +246469,45 @@ "arn:aws:iam::012345678901:role/SameRole" ] } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Profile: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Profile", + "entityType": "Resource", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -195864,7 +246520,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -195873,6 +246529,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -195926,7 +246621,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -195935,6 +246630,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 1, + "endLine": 17, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): KubectlHandlerRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "KubectlHandlerRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 21, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -195966,7 +246700,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -195975,6 +246709,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Elb: No Metadata.com.aws.cloudformation.Context block found.; Subnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Elb", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "Subnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -196106,6 +246894,221 @@ } ] }, + "good/W9100_context_valid.yaml": { + "filePath": "good/W9100_context_valid.yaml", + "status": "OK", + "version": "1.8.0", + "metadata": { + "resourcesScanned": 4, + "counts": { + "fatal": 4, + "errors": 0, + "warnings": 0, + "informational": 6, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Code' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "CustomProviderFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Code'", + "category": "Schema", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 25, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "CustomProviderFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 25, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Code' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "LogRetentionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Code'", + "category": "Schema", + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 23, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "F3003", + "severity": "FATAL", + "message": "'Role' is a required property", + "source": "SCHEMA", + "entity": { + "logicalId": "LogRetentionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties", + "suggestedFix": "Add the required property 'Role'", + "category": "Schema", + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 23, + "ruleDescription": "Required property missing", + "phase": "SCHEMA" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'DeletionPolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3011", + "severity": "INFO", + "message": "'UpdateReplacePolicy' is a required property (The default action when replacing/removing a resource is to delete it. Set explicit values for stateful resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Check stateful resources have a set UpdateReplacePolicy/DeletionPolicy", + "phase": "LINT" + }, + { + "ruleId": "I3013", + "severity": "INFO", + "message": "'MessageRetentionPeriod' is a required property (The default retention period will delete the data after a pre-defined time. Set an explicit values to avoid data loss on resource)", + "source": "CFN_LINT", + "entity": { + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Check resources with auto expiring content have explicit retention period", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'OrderQueue' of type 'AWS::SQS::Queue' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "OrderQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'CustomProviderFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "CustomProviderFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 25, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + }, + { + "ruleId": "I9040", + "severity": "INFO", + "message": "Resource 'LogRetentionFunction' of type 'AWS::Lambda::Function' supports Tags but none are configured", + "source": "ENGINE", + "entity": { + "logicalId": "LogRetentionFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Properties.Tags", + "suggestedFix": "Add Tags to improve resource organization and cost tracking", + "category": "Best Practice", + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 23, + "ruleDescription": "Resource should have Tags", + "phase": "LINT" + } + ] + }, "good/apigateway_method_authorizer_same_rest_api.yaml": { "filePath": "good/apigateway_method_authorizer_same_rest_api.yaml", "status": "OK", @@ -196115,7 +247118,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -196124,6 +247127,99 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Authorizer1: No Metadata.com.aws.cloudformation.Context block found.; Deployment1: No Metadata.com.aws.cloudformation.Context block found.; Method1: No Metadata.com.aws.cloudformation.Context block found.; RestApi1: No Metadata.com.aws.cloudformation.Context block found.; Stage1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Authorizer1", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "Deployment1", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Method1", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApi1", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Stage1", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -196341,7 +247437,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -196350,6 +247446,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): AuroraDB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -196515,7 +247650,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -196542,6 +247677,203 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 1, + "endLine": 16, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): BucketLong: No Metadata.com.aws.cloudformation.Context block found.; BucketShort: No Metadata.com.aws.cloudformation.Context block found.; SubBlock: No Metadata.com.aws.cloudformation.Context block found.; WithBase64: No Metadata.com.aws.cloudformation.Context block found.; WithCidr: No Metadata.com.aws.cloudformation.Context block found.; WithFindInMap: No Metadata.com.aws.cloudformation.Context block found.; WithGetAZs: No Metadata.com.aws.cloudformation.Context block found.; WithGetAtt: No Metadata.com.aws.cloudformation.Context block found.; WithIf: No Metadata.com.aws.cloudformation.Context block found.; WithImport: No Metadata.com.aws.cloudformation.Context block found.; WithJoin: No Metadata.com.aws.cloudformation.Context block found.; WithSelect: No Metadata.com.aws.cloudformation.Context block found.; WithSplit: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BucketLong", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "BucketShort", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubBlock", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithBase64", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 77, + "startColumn": 3, + "endLine": 77, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithCidr", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 103, + "startColumn": 3, + "endLine": 103, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithFindInMap", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 68, + "startColumn": 3, + "endLine": 68, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithGetAZs", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 97, + "startColumn": 3, + "endLine": 97, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithGetAtt", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithIf", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithImport", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithJoin", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithSelect", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WithSplit", + "resourceType": "Custom::IntrinsicTest" + }, + "location": { + "startLine": 83, + "startColumn": 3, + "endLine": 83, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -196599,7 +247931,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -196608,6 +247940,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -196639,7 +248010,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -196648,6 +248019,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Distribution: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Distribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -196679,7 +248089,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -196707,6 +248117,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Pipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -196738,7 +248187,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 12, "debug": 0 }, @@ -196784,6 +248233,73 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 22, + "startColumn": 1, + "endLine": 22, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Database: No Metadata.com.aws.cloudformation.Context block found.; DevBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Database", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DevBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -197037,7 +248553,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -197065,6 +248581,60 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 24, + "startColumn": 1, + "endLine": 24, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): CloudFrontDistribution: No Metadata.com.aws.cloudformation.Context block found.; myInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "myInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -197120,7 +248690,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -197128,7 +248698,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/core/conditions.yaml": { "filePath": "good/core/conditions.yaml", @@ -197139,7 +248749,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 7, + "warnings": 9, "informational": 18, "debug": 0 }, @@ -197306,6 +248916,138 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 1, + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): AMIIDLookup: No Metadata.com.aws.cloudformation.Context block found.; InstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; myInstance1: No Metadata.com.aws.cloudformation.Context block found.; myInstance2: No Metadata.com.aws.cloudformation.Context block found.; myInstance3: No Metadata.com.aws.cloudformation.Context block found.; myInstance4: No Metadata.com.aws.cloudformation.Context block found.; mySubnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 99, + "startColumn": 3, + "endLine": 99, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "InstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance1", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance4", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -197697,7 +249439,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -197718,6 +249460,25 @@ "endColumn": 12, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 2, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -197730,7 +249491,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -197751,6 +249512,25 @@ "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -197763,7 +249543,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 3, "debug": 0 }, @@ -197791,6 +249571,45 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -197866,7 +249685,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -197887,6 +249706,25 @@ "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -197899,7 +249737,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -197920,6 +249758,25 @@ "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -197932,7 +249789,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 1, "informational": 0, "debug": 0 }, @@ -197953,6 +249810,25 @@ "endColumn": 10, "ruleDescription": "Resources section must exist and be non-empty", "phase": "SCHEMA" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -197965,7 +249841,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -197974,6 +249850,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyKey: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyKey", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 5, + "endLine": 7, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -198041,7 +249956,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 12, + "warnings": 14, "informational": 8, "debug": 0 }, @@ -198335,6 +250250,125 @@ "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedArray: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedEmpty: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedGetAttr: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedObject: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedRef: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestDefinedValue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "LambdaFunctionTestDefinedArray", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestDefinedEmpty", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestDefinedGetAttr", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestDefinedObject", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestDefinedRef", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestDefinedValue", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 75, + "startColumn": 3, + "endLine": 75, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -198509,7 +250543,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 8, + "warnings": 10, "informational": 6, "debug": 0 }, @@ -198686,6 +250720,99 @@ "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestNotDefinedFromParent: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestNotDefinedFromProperties: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestNotDefinedRefAWSNoValue: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunctionTestNotDefinedWithSiblings: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "LambdaFunctionTestNotDefinedFromParent", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestNotDefinedFromProperties", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestNotDefinedRefAWSNoValue", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunctionTestNotDefinedWithSiblings", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -198820,7 +250947,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 3, + "warnings": 5, "informational": 4, "debug": 0 }, @@ -198932,6 +251059,73 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; TimeoutInNumericsFunction: No Metadata.com.aws.cloudformation.Context block found.; TimeoutInStringFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "TimeoutInNumericsFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TimeoutInStringFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -199026,7 +251220,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 3, + "warnings": 5, "informational": 4, "debug": 0 }, @@ -199138,6 +251332,73 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; TimeoutInNumericsFunction: No Metadata.com.aws.cloudformation.Context block found.; TimeoutInStringFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaExecutionRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "TimeoutInNumericsFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TimeoutInStringFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -199232,7 +251493,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -199271,6 +251532,25 @@ "endColumn": 9, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -199283,7 +251563,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -199291,7 +251571,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/deletion_policies.yaml": { "filePath": "good/deletion_policies.yaml", @@ -199302,7 +251622,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 7, "debug": 0 }, @@ -199386,6 +251706,60 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; DB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "DB", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -199533,7 +251907,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -199542,6 +251916,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): DDBTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DDBTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -199653,7 +252066,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -199662,6 +252075,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): GoodTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GoodTable", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -199773,7 +252225,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -199782,6 +252234,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Task: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Task", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -199859,7 +252350,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -199868,6 +252359,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Service: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Service", + "entityType": "Resource", + "resourceType": "AWS::ECS::Service" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -200079,7 +252624,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 7, "debug": 0 }, @@ -200088,6 +252633,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TaskDef", + "entityType": "Resource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -200257,7 +252841,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -200266,6 +252850,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ELB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ELB", + "entityType": "Resource", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 6, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -200297,7 +252920,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -200306,6 +252929,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LowercaseType: No Metadata.com.aws.cloudformation.Context block found.; MixedCaseType: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LowercaseType", + "entityType": "Resource", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "MixedCaseType", + "resourceType": "AWS::Batch::ComputeEnvironment" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -200449,7 +253126,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -200458,6 +253135,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Instance: No Metadata.com.aws.cloudformation.Context block found.; ScheduledRule: No Metadata.com.aws.cloudformation.Context block found.; Sg: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ScheduledRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Sg", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 5 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -200633,7 +253390,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -200642,6 +253399,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): S3BucketA: No Metadata.com.aws.cloudformation.Context block found.; S3BucketB: No Metadata.com.aws.cloudformation.Context block found.; S3BucketC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "S3BucketA", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "S3BucketB", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "S3BucketC", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -200713,7 +253537,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 10, "debug": 0 }, @@ -200722,6 +253546,164 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): Topic1: No Metadata.com.aws.cloudformation.Context block found.; Topic10: No Metadata.com.aws.cloudformation.Context block found.; Topic2: No Metadata.com.aws.cloudformation.Context block found.; Topic3: No Metadata.com.aws.cloudformation.Context block found.; Topic4: No Metadata.com.aws.cloudformation.Context block found.; Topic5: No Metadata.com.aws.cloudformation.Context block found.; Topic6: No Metadata.com.aws.cloudformation.Context block found.; Topic7: No Metadata.com.aws.cloudformation.Context block found.; Topic8: No Metadata.com.aws.cloudformation.Context block found.; Topic9: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic1", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Topic10", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 104, + "startColumn": 3, + "endLine": 104, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic2", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic3", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic4", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic5", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic6", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 63, + "startColumn": 3, + "endLine": 63, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic7", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic8", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 81, + "startColumn": 3, + "endLine": 81, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic9", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -200933,7 +253915,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -200941,7 +253923,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Module: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Module", + "entityType": "Resource", + "resourceType": "My::S3::Bucket::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 5, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/functions/relationship_conditions.yaml": { "filePath": "good/functions/relationship_conditions.yaml", @@ -200952,7 +253974,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -201007,6 +254029,73 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): AMIIDLookup: No Metadata.com.aws.cloudformation.Context block found.; InstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AMIIDLookup", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "InstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -201103,7 +254192,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -201135,6 +254224,73 @@ "lifecycle": "deprecated" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 22, + "startColumn": 1, + "endLine": 22, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): ConfigApplication: No Metadata.com.aws.cloudformation.Context block found.; ConfigEnvironment: No Metadata.com.aws.cloudformation.Context block found.; FunctionC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ConfigApplication", + "entityType": "Resource", + "resourceType": "AWS::AppConfig::Application" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "ConfigEnvironment", + "resourceType": "AWS::AppConfig::Environment" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionC", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -201230,7 +254386,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 10, "debug": 0 }, @@ -201239,6 +254395,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): SubnetA: No Metadata.com.aws.cloudformation.Context block found.; SubnetB: No Metadata.com.aws.cloudformation.Context block found.; Vpc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -201468,7 +254691,7 @@ "counts": { "fatal": 3, "errors": 2, - "warnings": 2, + "warnings": 4, "informational": 16, "debug": 0 }, @@ -201645,6 +254868,125 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 1, + "endLine": 18, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): LaunchConfiguration: No Metadata.com.aws.cloudformation.Context block found.; MyStack: No Metadata.com.aws.cloudformation.Context block found.; myAlb: No Metadata.com.aws.cloudformation.Context block found.; myCustomResource: No Metadata.com.aws.cloudformation.Context block found.; myInstance: No Metadata.com.aws.cloudformation.Context block found.; mySubStack: No Metadata.com.aws.cloudformation.Context block found.; myVPc2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "MyStack", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myAlb", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myCustomResource", + "resourceType": "Custom::Test" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySubStack", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVPc2", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 69, + "startColumn": 3, + "endLine": 69, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -201991,7 +255333,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 9, "debug": 0 }, @@ -202141,6 +255483,112 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): GreetingRequest: No Metadata.com.aws.cloudformation.Context block found.; IOTPolicies: No Metadata.com.aws.cloudformation.Context block found.; Key: No Metadata.com.aws.cloudformation.Context block found.; TestGoodStateMachine1: No Metadata.com.aws.cloudformation.Context block found.; myPolicy: No Metadata.com.aws.cloudformation.Context block found.; myPolicy2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GreetingRequest", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Method" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "IOTPolicies", + "resourceType": "AWS::IoT::Policy" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Key", + "resourceType": "AWS::ApiGateway::ApiKey" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestGoodStateMachine1", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "location": { + "startLine": 137, + "startColumn": 3, + "endLine": 137, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myPolicy2", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -202343,7 +255791,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -202390,6 +255838,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TestRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TestRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -202444,7 +255931,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -202452,7 +255939,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 1, + "endLine": 16, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): APICommonCodeLayer: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "APICommonCodeLayer", + "entityType": "Resource", + "resourceType": "AWS::Serverless::LayerVersion" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 21, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/functions_findinmap.yaml": { "filePath": "good/functions_findinmap.yaml", @@ -202463,7 +255990,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -202472,6 +255999,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): myInstance1: No Metadata.com.aws.cloudformation.Context block found.; myInstance2: No Metadata.com.aws.cloudformation.Context block found.; myInstance3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "myInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myInstance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -202615,7 +256209,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 18, "debug": 0 }, @@ -202714,6 +256308,151 @@ "ruleDescription": "Resource type is from a service that is sunsetting", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (9 resource(s)): Cluster0: No Metadata.com.aws.cloudformation.Context block found.; Cluster1: No Metadata.com.aws.cloudformation.Context block found.; Cluster2: No Metadata.com.aws.cloudformation.Context block found.; Cluster3: No Metadata.com.aws.cloudformation.Context block found.; Mesh0: No Metadata.com.aws.cloudformation.Context block found.; Mesh1: No Metadata.com.aws.cloudformation.Context block found.; Mesh2: No Metadata.com.aws.cloudformation.Context block found.; Mesh3: No Metadata.com.aws.cloudformation.Context block found.; Mesh4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster0", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "Cluster1", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Cluster2", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Cluster3", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 35, + "startColumn": 3, + "endLine": 35, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh0", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh1", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh2", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh3", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 81, + "startColumn": 3, + "endLine": 81, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh4", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -203103,7 +256842,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 2, + "warnings": 4, "informational": 17, "debug": 0 }, @@ -203166,6 +256905,112 @@ "ruleDescription": "Resource type is from a service that is sunsetting", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 1, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.; Cluster2: No Metadata.com.aws.cloudformation.Context block found.; Cluster3: No Metadata.com.aws.cloudformation.Context block found.; Mesh: No Metadata.com.aws.cloudformation.Context block found.; Mesh2: No Metadata.com.aws.cloudformation.Context block found.; Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Cluster2", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Cluster3", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Mesh2", + "resourceType": "AWS::AppMesh::Mesh" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Queue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -203524,7 +257369,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 25, "debug": 0 }, @@ -203589,6 +257434,203 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 30, + "startColumn": 1, + "endLine": 30, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): CustomResource: No Metadata.com.aws.cloudformation.Context block found.; ElasticIP: No Metadata.com.aws.cloudformation.Context block found.; ElasticLoadBalancer: No Metadata.com.aws.cloudformation.Context block found.; IamPipeline: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunction: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance: No Metadata.com.aws.cloudformation.Context block found.; MyEC2Instance1: No Metadata.com.aws.cloudformation.Context block found.; MyModule: No Metadata.com.aws.cloudformation.Context block found.; RolePolicies: No Metadata.com.aws.cloudformation.Context block found.; RootInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; RootRole: No Metadata.com.aws.cloudformation.Context block found.; WaitCondition: No Metadata.com.aws.cloudformation.Context block found.; mySnsTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResource", + "entityType": "Resource", + "resourceType": "Custom::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 149, + "startColumn": 3, + "endLine": 149, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "ElasticIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 117, + "startColumn": 3, + "endLine": 117, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ElasticLoadBalancer", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 121, + "startColumn": 3, + "endLine": 121, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamPipeline", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 160, + "startColumn": 3, + "endLine": 160, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyEC2Instance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyEC2Instance1", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyModule", + "resourceType": "My::Organization::Custom::MODULE" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RolePolicies", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootInstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 66, + "startColumn": 3, + "endLine": 66, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WaitCondition", + "resourceType": "AWS::CloudFormation::WaitCondition" + }, + "location": { + "startLine": 154, + "startColumn": 3, + "endLine": 154, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "mySnsTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -204136,7 +258178,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -204145,6 +258187,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): ProvisionedProduct: No Metadata.com.aws.cloudformation.Context block found.; Topic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ProvisionedProduct", + "entityType": "Resource", + "resourceType": "AWS::ServiceCatalog::CloudFormationProvisionedProduct" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "Topic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -204196,7 +258292,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -204205,6 +258301,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): SubnetApEast2: No Metadata.com.aws.cloudformation.Context block found.; SubnetMxCentral1: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SubnetApEast2", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SubnetMxCentral1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -204388,7 +258538,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -204415,6 +258565,45 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 1, + "endLine": 21, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): ProdBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ProdBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -204446,7 +258635,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -204454,7 +258643,62 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 1, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): ListIfPolicy: No Metadata.com.aws.cloudformation.Context block found.; ScalarIfPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ListIfPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "ScalarIfPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/iam_intrinsic_resource_arns.yaml": { "filePath": "good/iam_intrinsic_resource_arns.yaml", @@ -204465,7 +258709,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -204474,6 +258718,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): GetAttResource: No Metadata.com.aws.cloudformation.Context block found.; SomeBucket: No Metadata.com.aws.cloudformation.Context block found.; SubFullyResolved: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GetAttResource", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "SomeBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubFullyResolved", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -204505,7 +258816,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -204514,6 +258825,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Policy: No Metadata.com.aws.cloudformation.Context block found.; Role: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Policy", + "entityType": "Resource", + "resourceType": "AWS::IAM::Policy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Role", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -204545,7 +258910,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 7, "debug": 0 }, @@ -204608,6 +258973,125 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): TopicAliasArn: No Metadata.com.aws.cloudformation.Context block found.; TopicAliasName: No Metadata.com.aws.cloudformation.Context block found.; TopicIntrinsicAliasArn: No Metadata.com.aws.cloudformation.Context block found.; TopicKeyArn: No Metadata.com.aws.cloudformation.Context block found.; TopicKeyId: No Metadata.com.aws.cloudformation.Context block found.; TopicMultiRegionKeyArn: No Metadata.com.aws.cloudformation.Context block found.; TopicMultiRegionKeyId: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TopicAliasArn", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "TopicAliasName", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicIntrinsicAliasArn", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicKeyArn", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicKeyId", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicMultiRegionKeyArn", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TopicMultiRegionKeyId", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -204759,7 +259243,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 4, "debug": 0 }, @@ -204805,6 +259289,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Perm: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -204904,7 +259427,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -204932,6 +259455,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Perm: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Perm", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Permission" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -205031,7 +259593,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -205078,6 +259640,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SnapStartFunc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SnapStartFunc", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -205131,7 +259732,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -205140,6 +259741,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): LambdaFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFn", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3042", "severity": "INFO", @@ -205212,7 +259852,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -205251,6 +259891,25 @@ "endColumn": 12, "ruleDescription": "Check if Mappings are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -205263,7 +259922,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -205294,6 +259953,45 @@ "actualValue": "vpc-123456" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 1, + "endLine": 17, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): mySubnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -205370,7 +260068,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -205397,6 +260095,45 @@ "ruleDescription": "Check if Mappings are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): R: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "R", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 4, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -205428,7 +260165,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -205437,6 +260174,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): IamPipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamPipeline", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -205468,7 +260244,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -205477,6 +260253,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): IamRoleModule: No Metadata.com.aws.cloudformation.Context block found.; OtherResource: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamRoleModule", + "entityType": "Resource", + "resourceType": "Some::IAM::Role::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "OtherResource", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -205508,7 +260338,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -205517,6 +260347,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::Neptune::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -205593,7 +260462,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 13, "debug": 0 }, @@ -205638,6 +260507,99 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 54, + "startColumn": 1, + "endLine": 54, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): rDBMonitoringRole: No Metadata.com.aws.cloudformation.Context block found.; rDBPassword: No Metadata.com.aws.cloudformation.Context block found.; rDBServerInstance: No Metadata.com.aws.cloudformation.Context block found.; rDBSubnetGroup: No Metadata.com.aws.cloudformation.Context block found.; rParameterGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rDBMonitoringRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "rDBPassword", + "resourceType": "Custom::Secret" + }, + "location": { + "startLine": 82, + "startColumn": 5, + "endLine": 82, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBServerInstance", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBSubnetGroup", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 68, + "startColumn": 5, + "endLine": 68, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rParameterGroup", + "resourceType": "AWS::RDS::DBParameterGroup" + }, + "location": { + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -205941,7 +260903,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -205969,6 +260931,45 @@ "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::DocDB::DBCluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -206121,7 +261122,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -206130,6 +261131,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 1, + "endLine": 16, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Queue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Queue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -206216,7 +261256,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 6, "debug": 0 }, @@ -206244,6 +261284,73 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): VPC: No Metadata.com.aws.cloudformation.Context block found.; myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.; untaggedInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "VPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "myS3Bucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "untaggedInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -206382,7 +261489,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -206391,6 +261498,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myS3Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -206444,7 +261590,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 1, "debug": 0 }, @@ -206489,6 +261635,45 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -206520,7 +261705,7 @@ "counts": { "fatal": 3, "errors": 0, - "warnings": 14, + "warnings": 15, "informational": 0, "debug": 0 }, @@ -206829,6 +262014,25 @@ "endColumn": 13, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 81, + "startColumn": 1, + "endLine": 81, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -206841,7 +262045,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -206915,6 +262119,60 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LaunchConfiguration: No Metadata.com.aws.cloudformation.Context block found.; SomeLambda: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "SomeLambda", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -207016,7 +262274,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 0, "debug": 0 }, @@ -207096,6 +262354,45 @@ "endColumn": 16, "ruleDescription": "Check if Conditions are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 57, + "startColumn": 5, + "endLine": 57, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): WaitConditionHandle: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "WaitConditionHandle", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 58, + "startColumn": 9, + "endLine": 58, + "endColumn": 29, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -207108,7 +262405,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -207117,6 +262414,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyAPI: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyAPI", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -207148,7 +262484,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 1, + "warnings": 3, "informational": 4, "debug": 0 }, @@ -207222,6 +262558,60 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 1, + "endLine": 13, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LaunchConfiguration: No Metadata.com.aws.cloudformation.Context block found.; SomeLambda: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchConfiguration", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "SomeLambda", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -207323,7 +262713,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 21, "debug": 0 }, @@ -207376,6 +262766,125 @@ "actualValue": "vpc-1234567" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 28, + "startColumn": 1, + "endLine": 28, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): mySubnet21: No Metadata.com.aws.cloudformation.Context block found.; mySubnet22: No Metadata.com.aws.cloudformation.Context block found.; myVpc1: No Metadata.com.aws.cloudformation.Context block found.; myVpc2: No Metadata.com.aws.cloudformation.Context block found.; myVpc3: No Metadata.com.aws.cloudformation.Context block found.; myVpc4: No Metadata.com.aws.cloudformation.Context block found.; myVpc5: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "mySubnet21", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "mySubnet22", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc1", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc2", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc3", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc4", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myVpc5", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -207844,7 +263353,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 11, "debug": 0 }, @@ -207853,6 +263362,112 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 1, + "endLine": 26, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): AppSubnetPrivateRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; AppSubnetPublicRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; CustomResource: No Metadata.com.aws.cloudformation.Context block found.; CustomSubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; ProxySubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnetRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AppSubnetPrivateRouteTableAssociation", + "entityType": "Resource", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 40, + "relatedResources": [ + { + "resource": { + "id": "AppSubnetPublicRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomResource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CustomSubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 66, + "startColumn": 3, + "endLine": 66, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProxySubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnetRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -208156,7 +263771,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 14, "debug": 0 }, @@ -208165,6 +263780,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): NatGW: No Metadata.com.aws.cloudformation.Context block found.; RedshiftSubnetGroup: No Metadata.com.aws.cloudformation.Context block found.; Route1: No Metadata.com.aws.cloudformation.Context block found.; RouteTable1: No Metadata.com.aws.cloudformation.Context block found.; Subnet1: No Metadata.com.aws.cloudformation.Context block found.; SubnetRTAssoc: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NatGW", + "entityType": "Resource", + "resourceType": "AWS::EC2::NatGateway" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "RedshiftSubnetGroup", + "resourceType": "AWS::Redshift::ClusterSubnetGroup" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Route1", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RouteTable1", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetRTAssoc", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -208491,7 +264225,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -208519,6 +264253,45 @@ "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::Redshift::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -208660,7 +264433,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -208706,6 +264479,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Pool: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Pool", + "entityType": "Resource", + "resourceType": "AWS::DeviceFarm::DevicePool" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -208760,7 +264572,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -208768,7 +264580,75 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): BackupPlanWithIrrelevantLifecycle: No Metadata.com.aws.cloudformation.Context block found.; BackupPlanWithValidLifecycle: No Metadata.com.aws.cloudformation.Context block found.; BackupPlanWithoutLifecycle: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BackupPlanWithIrrelevantLifecycle", + "entityType": "Resource", + "resourceType": "AWS::Backup::BackupPlan" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 36, + "relatedResources": [ + { + "resource": { + "id": "BackupPlanWithValidLifecycle", + "resourceType": "AWS::Backup::BackupPlan" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BackupPlanWithoutLifecycle", + "resourceType": "AWS::Backup::BackupPlan" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/resources/cloudformation/nested_stack_dynamic.yaml": { "filePath": "good/resources/cloudformation/nested_stack_dynamic.yaml", @@ -208779,7 +264659,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -208788,6 +264668,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): NestedStack: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NestedStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -208819,7 +264738,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 2, + "warnings": 3, "informational": 0, "debug": 0 }, @@ -208876,6 +264795,25 @@ "endColumn": 6, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -208888,7 +264826,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 15, "debug": 0 }, @@ -208954,6 +264892,99 @@ "ruleDescription": "Warn when properties are configured to only work with the package command", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Stack3: No Metadata.com.aws.cloudformation.Context block found.; StackInvalidPath: No Metadata.com.aws.cloudformation.Context block found.; StackIsWebUrl: No Metadata.com.aws.cloudformation.Context block found.; StackNormal: No Metadata.com.aws.cloudformation.Context block found.; StackUrlIsObject: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Stack3", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "StackInvalidPath", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StackIsWebUrl", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StackNormal", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StackUrlIsObject", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -209245,7 +265276,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -209254,6 +265285,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CloudFrontDistribution: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFrontDistribution", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 25, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -209285,7 +265355,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 8, "debug": 0 }, @@ -209294,6 +265364,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): DDBTable1: No Metadata.com.aws.cloudformation.Context block found.; DDBTable2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DDBTable1", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "DDBTable2", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -209461,7 +265585,7 @@ "counts": { "fatal": 6, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 12, "debug": 0 }, @@ -209584,6 +265708,73 @@ "ruleDescription": "Value not valid under oneOf", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): DDBTableTransformAttributeDefinitions: No Metadata.com.aws.cloudformation.Context block found.; DDBTableTransformBoth: No Metadata.com.aws.cloudformation.Context block found.; DDBTableTransformKeySchema: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DDBTableTransformAttributeDefinitions", + "entityType": "Resource", + "resourceType": "AWS::DynamoDB::Table" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 40, + "relatedResources": [ + { + "resource": { + "id": "DDBTableTransformBoth", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DDBTableTransformKeySchema", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -209829,7 +266020,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 0, + "warnings": 2, "informational": 44, "debug": 0 }, @@ -209907,6 +266098,164 @@ "actualValue": "sg-test" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): BasicReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; FifthReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; FourthReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; MyClusterParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; MyNonClusterParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; MyOptionalClusterParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; MyParameterGroup: No Metadata.com.aws.cloudformation.Context block found.; SecondReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; SixthReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.; ThirdReplicationGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BasicReplicationGroup", + "entityType": "Resource", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 24, + "relatedResources": [ + { + "resource": { + "id": "FifthReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 122, + "startColumn": 3, + "endLine": 122, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FourthReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyClusterParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyNonClusterParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyOptionalClusterParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyParameterGroup", + "resourceType": "AWS::ElastiCache::ParameterGroup" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecondReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 67, + "startColumn": 3, + "endLine": 67, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SixthReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 139, + "startColumn": 3, + "endLine": 139, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ThirdReplicationGroup", + "resourceType": "AWS::ElastiCache::ReplicationGroup" + }, + "location": { + "startLine": 87, + "startColumn": 3, + "endLine": 87, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -210818,7 +267167,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -210827,6 +267176,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): IAMInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IAMInstanceProfile", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "Instance", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -210950,7 +267353,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -210959,6 +267362,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SomeManagedPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SomeManagedPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -210993,7 +267435,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -211002,6 +267444,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SomeManagedPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SomeManagedPolicy", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -211036,7 +267517,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 11, "debug": 0 }, @@ -211045,6 +267526,99 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): CodeBuildProject: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildRole: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildSubnet: No Metadata.com.aws.cloudformation.Context block found.; CodeBuildVPC: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CodeBuildProject", + "entityType": "Resource", + "resourceType": "AWS::CodeBuild::Project" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "CodeBuildRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildSubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CodeBuildVPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -211293,7 +267867,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -211302,6 +267876,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Ecr: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Ecr", + "entityType": "Resource", + "resourceType": "AWS::ECR::Repository" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 6, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -211333,7 +267946,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 4, "debug": 0 }, @@ -211419,6 +268032,73 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Function1: No Metadata.com.aws.cloudformation.Context block found.; Function2: No Metadata.com.aws.cloudformation.Context block found.; Function3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function1", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "Function2", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Function3", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -211512,7 +268192,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -211544,6 +268224,45 @@ "actualValue": "ami-123456" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -211598,7 +268317,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 17, "debug": 0 }, @@ -211607,6 +268326,125 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.; FunctionPermission1: No Metadata.com.aws.cloudformation.Context block found.; FunctionPermission2: No Metadata.com.aws.cloudformation.Context block found.; RootRole: No Metadata.com.aws.cloudformation.Context block found.; RootRole3: No Metadata.com.aws.cloudformation.Context block found.; RootRole4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 81, + "startColumn": 3, + "endLine": 81, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionPermission1", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionPermission2", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RootRole4", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -211988,7 +268826,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -211997,6 +268835,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TESTROLE: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TESTROLE", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -212074,7 +268951,7 @@ "counts": { "fatal": 1, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -212124,6 +269001,45 @@ "actualValue": "vpc-1234567" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -212199,7 +269115,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -212207,7 +269123,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): CustomResource4: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResource4", + "entityType": "Resource", + "resourceType": "Custom::SpecifiedCustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 18, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/resources/properties/exclusive.yaml": { "filePath": "good/resources/properties/exclusive.yaml", @@ -212218,7 +269174,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -212250,6 +269206,60 @@ "property": "Dimensions" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Alarm: No Metadata.com.aws.cloudformation.Context block found.; Ingress: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Alarm", + "entityType": "Resource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "Ingress", + "resourceType": "AWS::EC2::SecurityGroupIngress" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -212396,7 +269406,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -212405,6 +269415,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Authorizer: No Metadata.com.aws.cloudformation.Context block found.; Bucket: No Metadata.com.aws.cloudformation.Context block found.; Policy: No Metadata.com.aws.cloudformation.Context block found.; Stack: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Authorizer", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Bucket", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Policy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Stack", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 8 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -212481,7 +269571,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 6, "debug": 0 }, @@ -212532,6 +269622,112 @@ "actualValue": "Private" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): S3BadBucket: No Metadata.com.aws.cloudformation.Context block found.; SampleBadBucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy1: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy2: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy3: No Metadata.com.aws.cloudformation.Context block found.; SampleRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "S3BadBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "SampleBadBucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy1", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy2", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy3", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3042", "severity": "INFO", @@ -212667,7 +269863,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 6, "debug": 0 }, @@ -212699,6 +269895,125 @@ "actualValue": "Private" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): IngestionPipeline: No Metadata.com.aws.cloudformation.Context block found.; S3BadBucket: No Metadata.com.aws.cloudformation.Context block found.; SampleBadBucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy1: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy2: No Metadata.com.aws.cloudformation.Context block found.; SampleBadIAMPolicy3: No Metadata.com.aws.cloudformation.Context block found.; SampleRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IngestionPipeline", + "entityType": "Resource", + "resourceType": "AWS::OSIS::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 20, + "relatedResources": [ + { + "resource": { + "id": "S3BadBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadBucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy1", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy2", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 57, + "startColumn": 3, + "endLine": 57, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleBadIAMPolicy3", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SampleRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -212839,7 +270154,7 @@ "counts": { "fatal": 0, "errors": 3, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -212908,6 +270223,73 @@ "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): IamRole: No Metadata.com.aws.cloudformation.Context block found.; IamRoleWithConditions: No Metadata.com.aws.cloudformation.Context block found.; IamRoleWithNestedConditions: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IamRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "IamRoleWithConditions", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamRoleWithNestedConditions", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -212979,7 +270361,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 8, + "warnings": 10, "informational": 21, "debug": 0 }, @@ -213140,6 +270522,86 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): MyDB: No Metadata.com.aws.cloudformation.Context block found.; MyIAMUser: No Metadata.com.aws.cloudformation.Context block found.; myNewDb: No Metadata.com.aws.cloudformation.Context block found.; myThirdDb: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyDB", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "MyIAMUser", + "resourceType": "AWS::IAM::User" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myNewDb", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myThirdDb", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -213573,7 +271035,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -213582,6 +271044,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myRepository: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myRepository", + "entityType": "Resource", + "resourceType": "AWS::CodeCommit::Repository" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -213613,7 +271114,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -213622,6 +271123,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): AppSync: No Metadata.com.aws.cloudformation.Context block found.; AppSyncSchema: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AppSync", + "entityType": "Resource", + "resourceType": "AWS::AppSync::GraphQLApi" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "AppSyncSchema", + "resourceType": "AWS::AppSync::GraphQLSchema" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -213676,7 +271231,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -213685,6 +271240,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Function: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -213716,7 +271310,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 4, + "warnings": 6, "informational": 30, "debug": 0 }, @@ -213805,6 +271399,112 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): DBInstance1: No Metadata.com.aws.cloudformation.Context block found.; DBInstance2: No Metadata.com.aws.cloudformation.Context block found.; DBInstance3: No Metadata.com.aws.cloudformation.Context block found.; DBInstance4: No Metadata.com.aws.cloudformation.Context block found.; DBInstance5: No Metadata.com.aws.cloudformation.Context block found.; DBInstance6: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DBInstance1", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "DBInstance2", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance3", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance4", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance5", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DBInstance6", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -214396,7 +272096,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 4, "debug": 0 }, @@ -214405,6 +272105,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.; BucketPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -214501,7 +272268,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 2, "debug": 0 }, @@ -214529,6 +272296,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): TestPipeline: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "TestPipeline", + "entityType": "Resource", + "resourceType": "AWS::CodePipeline::Pipeline" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -214583,7 +272389,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -214592,6 +272398,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyCognitoUserPool: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyCognitoUserPool", + "entityType": "Resource", + "resourceType": "AWS::Cognito::UserPool" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 20, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -214639,7 +272484,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 5, "debug": 0 }, @@ -214668,6 +272513,73 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 1, + "endLine": 13, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): PolicyList: No Metadata.com.aws.cloudformation.Context block found.; WaitHandle: No Metadata.com.aws.cloudformation.Context block found.; WaitHandleRef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "WaitHandle", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WaitHandleRef", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -214770,7 +272682,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 5, "debug": 0 }, @@ -214799,6 +272711,73 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 1, + "endLine": 13, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): PolicyList: No Metadata.com.aws.cloudformation.Context block found.; WaitHandle: No Metadata.com.aws.cloudformation.Context block found.; WaitHandleRef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "PolicyList", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBInstance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "WaitHandle", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WaitHandleRef", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -214901,7 +272880,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 9, "debug": 0 }, @@ -214948,6 +272927,112 @@ "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): GroupBothBranchesValid: No Metadata.com.aws.cloudformation.Context block found.; GroupMutuallyExclusiveCnameItems: No Metadata.com.aws.cloudformation.Context block found.; GroupUnreachableInvalid: No Metadata.com.aws.cloudformation.Context block found.; StandaloneBothBranchesValid: No Metadata.com.aws.cloudformation.Context block found.; StandaloneMutuallyExclusiveCnameItems: No Metadata.com.aws.cloudformation.Context block found.; StandaloneUnreachableInvalid: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GroupBothBranchesValid", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "GroupMutuallyExclusiveCnameItems", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GroupUnreachableInvalid", + "resourceType": "AWS::Route53::RecordSetGroup" + }, + "location": { + "startLine": 47, + "startColumn": 3, + "endLine": 47, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneBothBranchesValid", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneMutuallyExclusiveCnameItems", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 40 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandaloneUnreachableInvalid", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -215157,7 +273242,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -215166,6 +273251,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): ConditionalProperties: No Metadata.com.aws.cloudformation.Context block found.; ConditionalWholeProperties: No Metadata.com.aws.cloudformation.Context block found.; LiteralNoValueAlias: No Metadata.com.aws.cloudformation.Context block found.; MutuallyExclusiveConditions: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalProperties", + "entityType": "Resource", + "resourceType": "AWS::Route53::RecordSet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 24, + "relatedResources": [ + { + "resource": { + "id": "ConditionalWholeProperties", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LiteralNoValueAlias", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 58, + "startColumn": 3, + "endLine": 58, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MutuallyExclusiveConditions", + "resourceType": "AWS::Route53::RecordSet" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -215372,7 +273537,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215381,6 +273546,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyApi: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215412,7 +273616,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -215421,6 +273625,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyConn: No Metadata.com.aws.cloudformation.Context block found.; MyFn: No Metadata.com.aws.cloudformation.Context block found.; MyTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyConn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Connector" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "MyFn", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215472,7 +273743,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215481,6 +273752,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215512,7 +273822,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215521,6 +273831,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215552,7 +273901,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215561,6 +273910,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215592,7 +273980,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215601,6 +273989,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215632,7 +274059,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215641,6 +274068,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215672,7 +274138,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215681,6 +274147,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215712,7 +274217,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215721,6 +274226,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215752,7 +274296,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215761,6 +274305,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 1, + "endLine": 16, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215792,7 +274375,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -215801,6 +274384,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Fn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Fn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215832,7 +274454,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -215841,6 +274463,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): AliasParam: No Metadata.com.aws.cloudformation.Context block found.; MyFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AliasParam", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "MyFn", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215892,7 +274568,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -215901,6 +274577,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): ApiIdParam: No Metadata.com.aws.cloudformation.Context block found.; ApiSubParam: No Metadata.com.aws.cloudformation.Context block found.; MyFn: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApiIdParam", + "entityType": "Resource", + "resourceType": "AWS::SSM::Parameter" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ApiSubParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyFn", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -215972,7 +274715,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -215981,6 +274724,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyFn: No Metadata.com.aws.cloudformation.Context block found.; StageParam: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "StageParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -216032,7 +274829,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -216041,6 +274838,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyFn: No Metadata.com.aws.cloudformation.Context block found.; RoleArnParam: No Metadata.com.aws.cloudformation.Context block found.; RoleRefParam: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyFn", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "RoleArnParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RoleRefParam", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -216112,7 +274976,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -216120,7 +274984,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Layer: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Layer", + "entityType": "Resource", + "resourceType": "AWS::Serverless::LayerVersion" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/sam/simpletable_no_primarykey.yaml": { "filePath": "good/sam/simpletable_no_primarykey.yaml", @@ -216131,7 +275035,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -216140,6 +275044,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyTable", + "entityType": "Resource", + "resourceType": "AWS::Serverless::SimpleTable" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -216171,7 +275114,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -216180,6 +275123,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyTable: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyTable", + "entityType": "Resource", + "resourceType": "AWS::Serverless::SimpleTable" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -216211,7 +275193,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -216238,6 +275220,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MySM: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MySM", + "entityType": "Resource", + "resourceType": "AWS::Serverless::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -216269,7 +275290,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -216277,7 +275298,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyReport: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyReport", + "entityType": "Resource", + "resourceType": "Initech::TPS::Report" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/schema_valid_resources.yaml": { "filePath": "good/schema_valid_resources.yaml", @@ -216288,7 +275349,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -216297,6 +275358,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; Role: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "Role", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -216370,7 +275485,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -216379,6 +275494,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -216433,7 +275587,7 @@ "counts": { "fatal": 0, "errors": 4, - "warnings": 0, + "warnings": 2, "informational": 20, "debug": 0 }, @@ -216534,6 +275688,138 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): FunctionA: No Metadata.com.aws.cloudformation.Context block found.; FunctionALogGroup: No Metadata.com.aws.cloudformation.Context block found.; FunctionB: No Metadata.com.aws.cloudformation.Context block found.; FunctionBLogGroup: No Metadata.com.aws.cloudformation.Context block found.; FunctionC: No Metadata.com.aws.cloudformation.Context block found.; FunctionCLogGroup: No Metadata.com.aws.cloudformation.Context block found.; LogSubscriptionFunction: No Metadata.com.aws.cloudformation.Context block found.; LogSubscriptionFunctionLogGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "FunctionA", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "FunctionALogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionB", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionBLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionC", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionCLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogSubscriptionFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogSubscriptionFunctionLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 73, + "startColumn": 3, + "endLine": 73, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -216945,7 +276231,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -216954,6 +276240,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): FifoQueue: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "FifoQueue", + "entityType": "Resource", + "resourceType": "AWS::SQS::Queue" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -217086,7 +276411,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -217095,6 +276420,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Doc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Doc", + "entityType": "Resource", + "resourceType": "AWS::SSM::Document" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -217172,7 +276536,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -217181,6 +276545,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -217235,7 +276638,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -217263,6 +276666,45 @@ "ruleDescription": "Hardcoded ARN property", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SM: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SM", + "entityType": "Resource", + "resourceType": "AWS::StepFunctions::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 5, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217294,7 +276736,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -217303,6 +276745,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): JoinedFromAParameter: No Metadata.com.aws.cloudformation.Context block found.; JoinedFromAReference: No Metadata.com.aws.cloudformation.Context block found.; OnlySomeChoicesTooLong: No Metadata.com.aws.cloudformation.Context block found.; SubstitutedFromAParameter: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "JoinedFromAParameter", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 5, + "endLine": 21, + "endColumn": 26, + "relatedResources": [ + { + "resource": { + "id": "JoinedFromAReference", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 13, + "startColumn": 5, + "endLine": 13, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OnlySomeChoicesTooLong", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 41, + "startColumn": 5, + "endLine": 41, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubstitutedFromAParameter", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 35, + "startColumn": 5, + "endLine": 35, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -217506,7 +277028,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -217515,6 +277037,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -217569,7 +277130,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -217578,6 +277139,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): AppName: No Metadata.com.aws.cloudformation.Context block found.; ExampleLayer: No Metadata.com.aws.cloudformation.Context block found.; MyServerlessFunctionLogicalID: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AppName", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "ExampleLayer", + "resourceType": "AWS::Serverless::LayerVersion" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MyServerlessFunctionLogicalID", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217629,7 +277257,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -217638,6 +277266,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): App1: No Metadata.com.aws.cloudformation.Context block found.; App2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "App1", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Application" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 7, + "relatedResources": [ + { + "resource": { + "id": "App2", + "resourceType": "AWS::Serverless::Application" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217689,7 +277371,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -217698,6 +277380,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 19, + "startColumn": 1, + "endLine": 19, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): SkillFunction: No Metadata.com.aws.cloudformation.Context block found.; SkillFunction2: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SkillFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "SkillFunction2", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 29, + "startColumn": 3, + "endLine": 29, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217749,7 +277485,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -217758,6 +277494,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): LambdaFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LambdaFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 17, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217789,7 +277564,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -217798,6 +277573,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 1, + "endLine": 15, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Function: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217829,7 +277643,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -217838,6 +277652,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): HelloWorldFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "HelloWorldFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 5, + "endLine": 8, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -217869,7 +277722,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -217877,7 +277730,47 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/transform/language_extension.yaml": { "filePath": "good/transform/language_extension.yaml", @@ -217888,7 +277781,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 14, "debug": 0 }, @@ -217940,6 +277833,125 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 36, + "startColumn": 1, + "endLine": 36, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): MySubnet: No Metadata.com.aws.cloudformation.Context block found.; PolicyList: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroups: No Metadata.com.aws.cloudformation.Context block found.; TestLambdaFunction: No Metadata.com.aws.cloudformation.Context block found.; TestStateMachine: No Metadata.com.aws.cloudformation.Context block found.; WaitHandle: No Metadata.com.aws.cloudformation.Context block found.; WaitHandleRef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MySubnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "PolicyList", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 49, + "startColumn": 3, + "endLine": 49, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroups", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 84, + "startColumn": 3, + "endLine": 84, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestLambdaFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestStateMachine", + "resourceType": "AWS::Serverless::StateMachine" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WaitHandle", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WaitHandleRef", + "resourceType": "AWS::CloudFormation::WaitConditionHandle" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3013", "severity": "INFO", @@ -218233,7 +278245,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -218242,6 +278254,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SkillFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SkillFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218273,7 +278324,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -218282,6 +278333,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 1, + "endLine": 13, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Function: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218313,7 +278403,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 1, "debug": 0 }, @@ -218340,6 +278430,45 @@ "ruleDescription": "Hardcoded account ID in ARN", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): SkillFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "SkillFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218371,7 +278500,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -218380,6 +278509,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): StateMachine: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "StateMachine", + "entityType": "Resource", + "resourceType": "AWS::Serverless::StateMachine" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218411,7 +278579,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -218420,6 +278588,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): myApi: No Metadata.com.aws.cloudformation.Context block found.; myFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "myFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218471,7 +278693,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -218480,6 +278702,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): LiteralAliasFunction: No Metadata.com.aws.cloudformation.Context block found.; ParameterAliasFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LiteralAliasFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 23, + "relatedResources": [ + { + "resource": { + "id": "ParameterAliasFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218531,7 +278807,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -218540,6 +278816,86 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): myApi: No Metadata.com.aws.cloudformation.Context block found.; myBucket: No Metadata.com.aws.cloudformation.Context block found.; myFunction: No Metadata.com.aws.cloudformation.Context block found.; myIamPolicy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "myBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "myIamPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218611,7 +278967,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -218643,6 +278999,45 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 1, + "endLine": 9, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): myFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "myFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218674,7 +279069,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -218706,6 +279101,73 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): IgnoredFunction: No Metadata.com.aws.cloudformation.Context block found.; InheritsGlobalsFunction: No Metadata.com.aws.cloudformation.Context block found.; SelectiveIgnoreFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "IgnoredFunction", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "InheritsGlobalsFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SelectiveIgnoreFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218777,7 +279239,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -218786,6 +279248,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): ImportedSubnets: No Metadata.com.aws.cloudformation.Context block found.; SelectedSubnets: No Metadata.com.aws.cloudformation.Context block found.; StackOutputSubnets: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ImportedSubnets", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 32, + "startColumn": 5, + "endLine": 32, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "SelectedSubnets", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 42, + "startColumn": 5, + "endLine": 42, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StackOutputSubnets", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 10, + "startColumn": 5, + "endLine": 10, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -218857,7 +279386,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -218865,7 +279394,101 @@ "strict": false, "severityLevel": "DEBUG" }, - "diagnostics": [] + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): HookShapedType: No Metadata.com.aws.cloudformation.Context block found.; LegacyCustom: No Metadata.com.aws.cloudformation.Context block found.; OrgModule: No Metadata.com.aws.cloudformation.Context block found.; PrivateRegistryType: No Metadata.com.aws.cloudformation.Context block found.; UnbundledAmznType: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "HookShapedType", + "entityType": "Resource", + "resourceType": "MyCompany::Testing::MyTestHook" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 3, + "endLine": 17, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "LegacyCustom", + "resourceType": "Custom::MyThing" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OrgModule", + "resourceType": "My::Org::Resource::MODULE" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateRegistryType", + "resourceType": "Initech::TPS::Report" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnbundledAmznType", + "resourceType": "AMZN::Internal::UnbundledType" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + } + ] }, "good/vpc_subnets.yaml": { "filePath": "good/vpc_subnets.yaml", @@ -218876,7 +279499,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 12, "debug": 0 }, @@ -218923,6 +279546,86 @@ "ruleDescription": "Availability zone properties should not be hardcoded", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): MyVPC: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; SubnetA: No Metadata.com.aws.cloudformation.Context block found.; SubnetB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyVPC", + "entityType": "Resource", + "resourceType": "AWS::EC2::VPC" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "SecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -219195,7 +279898,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -219248,6 +279951,45 @@ "property": "AvailabilityZone" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): Subnet: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -219367,7 +280109,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 10, "debug": 0 }, @@ -219423,6 +280165,86 @@ } } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): KMS: No Metadata.com.aws.cloudformation.Context block found.; Table1: No Metadata.com.aws.cloudformation.Context block found.; Table2: No Metadata.com.aws.cloudformation.Context block found.; Table3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "KMS", + "entityType": "Resource", + "resourceType": "AWS::KMS::Key" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 6, + "relatedResources": [ + { + "resource": { + "id": "Table1", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Table2", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Table3", + "resourceType": "AWS::DynamoDB::Table" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -219646,7 +280468,7 @@ "counts": { "fatal": 4, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -219747,6 +280569,60 @@ "property": "NetworkInterfaceId" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Instance: No Metadata.com.aws.cloudformation.Context block found.; NetworkInterface: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "NetworkInterface", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -219879,7 +280755,7 @@ "counts": { "fatal": 5, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -219996,6 +280872,45 @@ "property": "NetworkInterfaceId" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): LaunchTemplate: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "LaunchTemplate", + "entityType": "Resource", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 17, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -220029,7 +280944,7 @@ "counts": { "fatal": 2, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -220084,6 +280999,45 @@ "property": "Ipv6AddressCount" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): NetworkInterface: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "NetworkInterface", + "entityType": "Resource", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 19, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -220139,7 +281093,7 @@ "counts": { "fatal": 5, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 18, "debug": 0 }, @@ -220251,6 +281205,99 @@ "ruleDescription": "One of properties required (requiredOr)", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Subnet1: No Metadata.com.aws.cloudformation.Context block found.; Subnet2: No Metadata.com.aws.cloudformation.Context block found.; Subnet3: No Metadata.com.aws.cloudformation.Context block found.; Subnet4: No Metadata.com.aws.cloudformation.Context block found.; Subnet5: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Subnet1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 3, + "endLine": 5, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Subnet2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet5", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -220653,7 +281700,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -220662,6 +281709,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Function: No Metadata.com.aws.cloudformation.Context block found.; Role: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Function", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 11, + "relatedResources": [ + { + "resource": { + "id": "Role", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 7 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -220713,7 +281814,7 @@ "counts": { "fatal": 0, "errors": 7, - "warnings": 1, + "warnings": 3, "informational": 55, "debug": 0 }, @@ -220889,6 +281990,255 @@ "ruleDescription": "Check if Password Properties are correctly configured", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (17 resource(s)): AuroraCluster: No Metadata.com.aws.cloudformation.Context block found.; AwsvpcTaskDef: No Metadata.com.aws.cloudformation.Context block found.; BadEngineInstance: No Metadata.com.aws.cloudformation.Context block found.; CognitoAuthorizer: No Metadata.com.aws.cloudformation.Context block found.; Deployment: No Metadata.com.aws.cloudformation.Context block found.; FargateService: No Metadata.com.aws.cloudformation.Context block found.; FifoMapping: No Metadata.com.aws.cloudformation.Context block found.; FifoProcessor: No Metadata.com.aws.cloudformation.Context block found.; FifoQueue: No Metadata.com.aws.cloudformation.Context block found.; MethodBadAuth: No Metadata.com.aws.cloudformation.Context block found.; RestApi: No Metadata.com.aws.cloudformation.Context block found.; RestApi2: No Metadata.com.aws.cloudformation.Context block found.; ServiceNoNetConfig: No Metadata.com.aws.cloudformation.Context block found.; SqsFifoQueue: No Metadata.com.aws.cloudformation.Context block found.; StageBadApi: No Metadata.com.aws.cloudformation.Context block found.; StandardDLQ: No Metadata.com.aws.cloudformation.Context block found.; TaskDef: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AuroraCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 109, + "startColumn": 3, + "endLine": 109, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "AwsvpcTaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BadEngineInstance", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CognitoAuthorizer", + "resourceType": "AWS::ApiGateway::Authorizer" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Deployment", + "resourceType": "AWS::ApiGateway::Deployment" + }, + "location": { + "startLine": 75, + "startColumn": 3, + "endLine": 75, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateService", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FifoMapping", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 102, + "startColumn": 3, + "endLine": 102, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FifoProcessor", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FifoQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MethodBadAuth", + "resourceType": "AWS::ApiGateway::Method" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApi", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RestApi2", + "resourceType": "AWS::ApiGateway::RestApi" + }, + "location": { + "startLine": 71, + "startColumn": 3, + "endLine": 71, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ServiceNoNetConfig", + "resourceType": "AWS::ECS::Service" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SqsFifoQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StageBadApi", + "resourceType": "AWS::ApiGateway::Stage" + }, + "location": { + "startLine": 79, + "startColumn": 3, + "endLine": 79, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "StandardDLQ", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDef", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -222039,7 +283389,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -222068,6 +283418,60 @@ "ruleDescription": "GetAtt attribute must exist on target resource type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): CustomResource: No Metadata.com.aws.cloudformation.Context block found.; KmsKey: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CustomResource", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::CustomResource" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "KmsKey", + "resourceType": "AWS::KMS::Key" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -222121,7 +283525,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 13, "debug": 0 }, @@ -222130,6 +283534,73 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 20, + "startColumn": 1, + "endLine": 20, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (3 resource(s)): MyInstance: No Metadata.com.aws.cloudformation.Context block found.; Subnet1: No Metadata.com.aws.cloudformation.Context block found.; Vpc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 31, + "startColumn": 3, + "endLine": 31, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Subnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -222417,7 +283888,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 3, "informational": 11, "debug": 0 }, @@ -222469,6 +283940,86 @@ "ruleDescription": "Dynamic references should not contain spaces", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Broker: No Metadata.com.aws.cloudformation.Context block found.; SESEventSourceMapping: No Metadata.com.aws.cloudformation.Context block found.; SESEventSourceMappingBadDynamicReference: No Metadata.com.aws.cloudformation.Context block found.; SESEventSourceMappingSpaces: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Broker", + "entityType": "Resource", + "resourceType": "AWS::AmazonMQ::Broker" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 9, + "relatedResources": [ + { + "resource": { + "id": "SESEventSourceMapping", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 4, + "startColumn": 3, + "endLine": 4, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SESEventSourceMappingBadDynamicReference", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 11, + "startColumn": 3, + "endLine": 11, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SESEventSourceMappingSpaces", + "resourceType": "AWS::Lambda::EventSourceMapping" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -222715,7 +284266,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 4, + "warnings": 6, "informational": 13, "debug": 0 }, @@ -222846,6 +284397,86 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 1, + "endLine": 7, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): Instance1: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; Subnet: No Metadata.com.aws.cloudformation.Context block found.; Vpc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Instance1", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "SecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -223127,7 +284758,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 5, "debug": 0 }, @@ -223174,6 +284805,99 @@ "ruleDescription": "GetStackOutput validation of parameters", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): InvalidMissing: No Metadata.com.aws.cloudformation.Context block found.; InvalidType: No Metadata.com.aws.cloudformation.Context block found.; ValidIf: No Metadata.com.aws.cloudformation.Context block found.; ValidJoin: No Metadata.com.aws.cloudformation.Context block found.; ValidTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "InvalidMissing", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "InvalidType", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ValidIf", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ValidJoin", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 21, + "startColumn": 3, + "endLine": 21, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ValidTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 13, + "startColumn": 3, + "endLine": 13, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -223285,7 +285009,7 @@ "counts": { "fatal": 5, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 19, "debug": 0 }, @@ -223404,6 +285128,138 @@ "ruleDescription": "Check if GetAtt matches destination format", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): CapacityReservation: No Metadata.com.aws.cloudformation.Context block found.; DocDBCluster: No Metadata.com.aws.cloudformation.Context block found.; SsmParameter: No Metadata.com.aws.cloudformation.Context block found.; TestCluster: No Metadata.com.aws.cloudformation.Context block found.; TestFargateExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; TestFargateTaskRole: No Metadata.com.aws.cloudformation.Context block found.; TestLogGroup: No Metadata.com.aws.cloudformation.Context block found.; TestTaskDefinitionWithGetAtt: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CapacityReservation", + "entityType": "Resource", + "resourceType": "AWS::EC2::CapacityReservation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "DocDBCluster", + "resourceType": "AWS::DocDB::DBCluster" + }, + "location": { + "startLine": 19, + "startColumn": 3, + "endLine": 19, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SsmParameter", + "resourceType": "AWS::SSM::Parameter" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestCluster", + "resourceType": "AWS::ECS::Cluster" + }, + "location": { + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestFargateExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestFargateTaskRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TestTaskDefinitionWithGetAtt", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -223820,7 +285676,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 1, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -223859,6 +285715,25 @@ "endColumn": 8, "ruleDescription": "Check if Parameters are Used", "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 1, + "endLine": 3, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -223871,7 +285746,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 0, "debug": 0 }, @@ -223902,6 +285777,45 @@ "resource_type": "AWS::S3::Bucket::MODULE" } } + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyModule: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyModule", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket::MODULE" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" } ] }, @@ -223914,7 +285828,7 @@ "counts": { "fatal": 0, "errors": 7, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -224063,6 +285977,99 @@ "ruleDescription": "Validate IAM trust policies", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): CloudFront1: No Metadata.com.aws.cloudformation.Context block found.; CloudFront2: No Metadata.com.aws.cloudformation.Context block found.; IamRole1: No Metadata.com.aws.cloudformation.Context block found.; IamRole2: No Metadata.com.aws.cloudformation.Context block found.; IamRole3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CloudFront1", + "entityType": "Resource", + "resourceType": "AWS::CloudFront::Distribution" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 14, + "relatedResources": [ + { + "resource": { + "id": "CloudFront2", + "resourceType": "AWS::CloudFront::Distribution" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamRole1", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamRole2", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamRole3", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 27, + "startColumn": 3, + "endLine": 27, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -224134,7 +286141,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 40, "debug": 0 }, @@ -224182,6 +286189,203 @@ "ruleDescription": "Resource type is from a service in maintenance mode", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 1, + "endLine": 6, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (13 resource(s)): Cluster: No Metadata.com.aws.cloudformation.Context block found.; FargateExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; FargateTaskRole: No Metadata.com.aws.cloudformation.Context block found.; LaunchConfiguration: No Metadata.com.aws.cloudformation.Context block found.; LoadBalancer: No Metadata.com.aws.cloudformation.Context block found.; LogGroup: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroup1: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroup2: No Metadata.com.aws.cloudformation.Context block found.; Subnet1: No Metadata.com.aws.cloudformation.Context block found.; Subnet2: No Metadata.com.aws.cloudformation.Context block found.; TaskDefinitionWithRefToParameter: No Metadata.com.aws.cloudformation.Context block found.; TaskDefinitionWithRefToResource: No Metadata.com.aws.cloudformation.Context block found.; Vpc: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Cluster", + "entityType": "Resource", + "resourceType": "AWS::ECS::Cluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 7, + "startColumn": 3, + "endLine": 7, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "FargateExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 9, + "startColumn": 3, + "endLine": 9, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FargateTaskRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LaunchConfiguration", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 111, + "startColumn": 3, + "endLine": 111, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoadBalancer", + "resourceType": "AWS::ElasticLoadBalancingV2::LoadBalancer" + }, + "location": { + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 65, + "startColumn": 3, + "endLine": 65, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroup1", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroup2", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 51, + "startColumn": 3, + "endLine": 51, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Subnet2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDefinitionWithRefToParameter", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TaskDefinitionWithRefToResource", + "resourceType": "AWS::ECS::TaskDefinition" + }, + "location": { + "startLine": 69, + "startColumn": 3, + "endLine": 69, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Vpc", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 6 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -225076,7 +287280,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 2, + "warnings": 4, "informational": 2, "debug": 0 }, @@ -225122,6 +287326,45 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 8, + "startColumn": 1, + "endLine": 8, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 5, + "endLine": 11, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -225176,7 +287419,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 37, "debug": 0 }, @@ -225185,6 +287428,255 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 111, + "startColumn": 1, + "endLine": 111, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (17 resource(s)): DeniedPolicies: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsDeadLetterQueue: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsLambda: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsLambdaErrorsGreaterThanZeroAlarm: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsQueue: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsQueueRetryPolicy: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsQueueSourcePolicy: No Metadata.com.aws.cloudformation.Context block found.; DmdEventsSubscription: No Metadata.com.aws.cloudformation.Context block found.; LogMonitoringPolicy: No Metadata.com.aws.cloudformation.Context block found.; TenantInfoReadPolicy: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsDeadLetterQueue: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsLambda: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsLambdaErrorsGreaterThanZeroAlarm: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsQueue: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsQueueRetryPolicy: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsQueueSourcePolicy: No Metadata.com.aws.cloudformation.Context block found.; VmdEventsSubscription: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DeniedPolicies", + "entityType": "Resource", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 115, + "startColumn": 3, + "endLine": 115, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "DmdEventsDeadLetterQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsLambda", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 293, + "startColumn": 3, + "endLine": 293, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsLambdaErrorsGreaterThanZeroAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 396, + "startColumn": 3, + "endLine": 396, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsQueueRetryPolicy", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 353, + "startColumn": 3, + "endLine": 353, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsQueueSourcePolicy", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 369, + "startColumn": 3, + "endLine": 369, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DmdEventsSubscription", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogMonitoringPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 132, + "startColumn": 5, + "endLine": 132, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "TenantInfoReadPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 151, + "startColumn": 3, + "endLine": 151, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsDeadLetterQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsLambda", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 168, + "startColumn": 3, + "endLine": 168, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsLambdaErrorsGreaterThanZeroAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 271, + "startColumn": 3, + "endLine": 271, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsQueue", + "resourceType": "AWS::SQS::Queue" + }, + "location": { + "startLine": 203, + "startColumn": 3, + "endLine": 203, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsQueueRetryPolicy", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 228, + "startColumn": 3, + "endLine": 228, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsQueueSourcePolicy", + "resourceType": "AWS::SQS::QueuePolicy" + }, + "location": { + "startLine": 244, + "startColumn": 3, + "endLine": 244, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VmdEventsSubscription", + "resourceType": "AWS::SNS::Subscription" + }, + "location": { + "startLine": 261, + "startColumn": 3, + "endLine": 261, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -226001,7 +288493,7 @@ "counts": { "fatal": 3, "errors": 1, - "warnings": 8, + "warnings": 10, "informational": 29, "debug": 0 }, @@ -226250,6 +288742,190 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): AutoScalingGroup: No Metadata.com.aws.cloudformation.Context block found.; BastionSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; Database: No Metadata.com.aws.cloudformation.Context block found.; DatabaseAlarm: No Metadata.com.aws.cloudformation.Context block found.; DatabaseSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunction: No Metadata.com.aws.cloudformation.Context block found.; LambdaRole: No Metadata.com.aws.cloudformation.Context block found.; LaunchTemplate: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet: No Metadata.com.aws.cloudformation.Context block found.; SNSTopic: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.; WebSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AutoScalingGroup", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 562, + "startColumn": 5, + "endLine": 562, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "BastionSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 488, + "startColumn": 5, + "endLine": 488, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Database", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 631, + "startColumn": 5, + "endLine": 631, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DatabaseAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 843, + "startColumn": 5, + "endLine": 843, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DatabaseSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 713, + "startColumn": 5, + "endLine": 713, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 732, + "startColumn": 5, + "endLine": 732, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 799, + "startColumn": 5, + "endLine": 799, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LaunchTemplate", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 556, + "startColumn": 7, + "endLine": 556, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 387, + "startColumn": 5, + "endLine": 387, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SNSTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 874, + "startColumn": 5, + "endLine": 874, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 382, + "startColumn": 7, + "endLine": 382, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 440, + "startColumn": 5, + "endLine": 440, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -226902,7 +289578,7 @@ "counts": { "fatal": 3, "errors": 1, - "warnings": 10, + "warnings": 12, "informational": 29, "debug": 0 }, @@ -227179,6 +289855,190 @@ "ruleDescription": "RDS instance should have StorageEncrypted", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 10, + "startColumn": 1, + "endLine": 10, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): AutoScalingGroup: No Metadata.com.aws.cloudformation.Context block found.; BastionSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; Database: No Metadata.com.aws.cloudformation.Context block found.; DatabaseAlarm: No Metadata.com.aws.cloudformation.Context block found.; DatabaseSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; LambdaFunction: No Metadata.com.aws.cloudformation.Context block found.; LambdaRole: No Metadata.com.aws.cloudformation.Context block found.; LaunchTemplate: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet: No Metadata.com.aws.cloudformation.Context block found.; SNSTopic: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.; WebSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AutoScalingGroup", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 234, + "startColumn": 3, + "endLine": 234, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "BastionSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 201, + "startColumn": 3, + "endLine": 201, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Database", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 265, + "startColumn": 3, + "endLine": 265, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DatabaseAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 366, + "startColumn": 3, + "endLine": 366, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DatabaseSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 290, + "startColumn": 3, + "endLine": 290, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 340, + "startColumn": 3, + "endLine": 340, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LaunchTemplate", + "resourceType": "AWS::EC2::LaunchTemplate" + }, + "location": { + "startLine": 229, + "startColumn": 5, + "endLine": 229, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 155, + "startColumn": 3, + "endLine": 155, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SNSTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 387, + "startColumn": 3, + "endLine": 387, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 150, + "startColumn": 5, + "endLine": 150, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "WebSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 173, + "startColumn": 3, + "endLine": 173, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -227831,7 +290691,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 6, + "warnings": 8, "informational": 13, "debug": 0 }, @@ -227954,6 +290814,86 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 53, + "startColumn": 3, + "endLine": 53, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (4 resource(s)): ConditionalResource: No Metadata.com.aws.cloudformation.Context block found.; Database: No Metadata.com.aws.cloudformation.Context block found.; DevelopmentBucket: No Metadata.com.aws.cloudformation.Context block found.; ProductionBucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalResource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 101, + "startColumn": 5, + "endLine": 101, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "Database", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 90, + "startColumn": 5, + "endLine": 90, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DevelopmentBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 83, + "startColumn": 5, + "endLine": 83, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProductionBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 78, + "startColumn": 7, + "endLine": 78, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -228227,7 +291167,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 7, + "warnings": 9, "informational": 21, "debug": 0 }, @@ -228370,6 +291310,138 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 51, + "startColumn": 1, + "endLine": 51, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (8 resource(s)): ConditionalResource: No Metadata.com.aws.cloudformation.Context block found.; Database: No Metadata.com.aws.cloudformation.Context block found.; DevSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; DevelopmentBucket: No Metadata.com.aws.cloudformation.Context block found.; LogicalConditionResource: No Metadata.com.aws.cloudformation.Context block found.; NestedConditionResource: No Metadata.com.aws.cloudformation.Context block found.; ProductionBucket: No Metadata.com.aws.cloudformation.Context block found.; ProductionSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ConditionalResource", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 101, + "startColumn": 3, + "endLine": 101, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "Database", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 91, + "startColumn": 3, + "endLine": 91, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DevSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 139, + "startColumn": 3, + "endLine": 139, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DevelopmentBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 85, + "startColumn": 3, + "endLine": 85, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LogicalConditionResource", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 168, + "startColumn": 3, + "endLine": 168, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NestedConditionResource", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 145, + "startColumn": 3, + "endLine": 145, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProductionBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 81, + "startColumn": 5, + "endLine": 81, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProductionSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 133, + "startColumn": 3, + "endLine": 133, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -228817,7 +291889,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -228839,6 +291911,60 @@ "ruleDescription": "Top-level keys must be valid section names", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; PersonalS3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 7, + "endLine": 18, + "endColumn": 16, + "relatedResources": [ + { + "resource": { + "id": "PersonalS3", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 40, + "startColumn": 5, + "endLine": 40, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -228915,7 +292041,7 @@ "counts": { "fatal": 1, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 3, "debug": 0 }, @@ -228937,6 +292063,60 @@ "ruleDescription": "Top-level keys must be valid section names", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 11, + "startColumn": 1, + "endLine": 11, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): Bucket: No Metadata.com.aws.cloudformation.Context block found.; PersonalS3: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 5, + "endLine": 14, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "PersonalS3", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 23, + "startColumn": 3, + "endLine": 23, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -229013,7 +292193,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 10, "debug": 0 }, @@ -229076,6 +292256,99 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.; Bucket3: No Metadata.com.aws.cloudformation.Context block found.; Bucket4: No Metadata.com.aws.cloudformation.Context block found.; Bucket5: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 29, + "startColumn": 5, + "endLine": 29, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 38, + "startColumn": 5, + "endLine": 38, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket3", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 46, + "startColumn": 5, + "endLine": 46, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket4", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 54, + "startColumn": 5, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket5", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 62, + "startColumn": 5, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -229297,7 +292570,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 14, "debug": 0 }, @@ -229360,6 +292633,125 @@ "ruleDescription": "Check if Conditions are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 23, + "startColumn": 1, + "endLine": 23, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (7 resource(s)): Bucket1: No Metadata.com.aws.cloudformation.Context block found.; Bucket2: No Metadata.com.aws.cloudformation.Context block found.; Bucket3: No Metadata.com.aws.cloudformation.Context block found.; Bucket4: No Metadata.com.aws.cloudformation.Context block found.; Bucket5: No Metadata.com.aws.cloudformation.Context block found.; Bucket6: No Metadata.com.aws.cloudformation.Context block found.; Bucket7: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Bucket1", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 25, + "startColumn": 3, + "endLine": 25, + "endColumn": 10, + "relatedResources": [ + { + "resource": { + "id": "Bucket2", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket3", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 39, + "startColumn": 3, + "endLine": 39, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket4", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket5", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket6", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 55, + "startColumn": 3, + "endLine": 55, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Bucket7", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -229665,7 +293057,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -229674,6 +293066,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyS3Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 16, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -229705,7 +293136,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 1, "debug": 0 }, @@ -229714,6 +293145,45 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 2, + "startColumn": 1, + "endLine": 2, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): MyS3Bucket: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyS3Bucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 3, + "startColumn": 3, + "endLine": 3, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -229745,7 +293215,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 0, + "warnings": 2, "informational": 2, "debug": 0 }, @@ -229790,6 +293260,60 @@ "ruleDescription": "Check if Serverless Resources have Serverless Transform", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 1, + "startColumn": 1, + "endLine": 1, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): MyApi: No Metadata.com.aws.cloudformation.Context block found.; MyFunction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "MyApi", + "entityType": "Resource", + "resourceType": "AWS::Serverless::Api" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 8, + "relatedResources": [ + { + "resource": { + "id": "MyFunction", + "resourceType": "AWS::Serverless::Function" + }, + "location": { + "startLine": 2, + "startColumn": 3, + "endLine": 2, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -229841,7 +293365,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -229873,6 +293397,99 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 5, + "endLine": 17, + "endColumn": 15, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): PollerEventRule: No Metadata.com.aws.cloudformation.Context block found.; PollerEventRuleIamRole: No Metadata.com.aws.cloudformation.Context block found.; PollerFunction: No Metadata.com.aws.cloudformation.Context block found.; PollerFunctionEventInvokePermission: No Metadata.com.aws.cloudformation.Context block found.; PollerFunctionIamRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 160, + "startColumn": 9, + "endLine": 160, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "PollerEventRuleIamRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 114, + "startColumn": 9, + "endLine": 114, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 64, + "startColumn": 9, + "endLine": 64, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunctionEventInvokePermission", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 189, + "startColumn": 9, + "endLine": 189, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunctionIamRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 18, + "startColumn": 9, + "endLine": 18, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -230080,7 +293697,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 0, + "warnings": 2, "informational": 9, "debug": 0 }, @@ -230112,6 +293729,99 @@ "lifecycle": "end-of-life" } }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): PollerEventRule: No Metadata.com.aws.cloudformation.Context block found.; PollerEventRuleIamRole: No Metadata.com.aws.cloudformation.Context block found.; PollerFunction: No Metadata.com.aws.cloudformation.Context block found.; PollerFunctionEventInvokePermission: No Metadata.com.aws.cloudformation.Context block found.; PollerFunctionIamRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "PollerEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 183, + "startColumn": 3, + "endLine": 183, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "PollerEventRuleIamRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 160, + "startColumn": 3, + "endLine": 160, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunctionEventInvokePermission", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 194, + "startColumn": 3, + "endLine": 194, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PollerFunctionIamRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 15, + "startColumn": 3, + "endLine": 15, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -230319,7 +294029,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 1, + "warnings": 3, "informational": 7, "debug": 0 }, @@ -230367,6 +294077,45 @@ "ruleDescription": "Instead of REFing a parameter for a secret use a dynamic reference", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 17, + "startColumn": 1, + "endLine": 17, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): DBCluster: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DBCluster", + "entityType": "Resource", + "resourceType": "AWS::RDS::DBCluster" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -230527,7 +294276,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 41, "debug": 0 }, @@ -230536,6 +294285,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 250, + "startColumn": 5, + "endLine": 250, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): WatchmakerInstance: No Metadata.com.aws.cloudformation.Context block found.; WatchmakerInstanceLogGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "WatchmakerInstance", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 573, + "startColumn": 13, + "endLine": 573, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "WatchmakerInstanceLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 1687, + "startColumn": 9, + "endLine": 1687, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -231347,7 +295150,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 75, + "warnings": 77, "informational": 142, "debug": 0 }, @@ -232907,6 +296710,1061 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (79 resource(s)): BillingChangeCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; BillingChangesCloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; BillingChangesCloudWatchFilter: No Metadata.com.aws.cloudformation.Context block found.; CloudTrailCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluateCloudTrailBucketLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluateCloudTrailLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluateKeyRotationLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluatePolicyPermissionsLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallEvaluateUserPolicyAssociationLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallInstanceRoleUseLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallMfaForUsersLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallVpcDefaultSecurityGroupsLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallVpcFlowLogLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigPermissionToCallVpcPeeringRouteTablesLambda: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEncryptedVolumes: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateCloudTrail: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateCloudTrailBucket: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateCloudTrailLogIntegrity: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateConfigInAllRegions: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateKeyRotations: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluatePolicyPermissions: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateRootAccount: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForEvaluateUserPolicyAssociations: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForIamPasswordPolicy: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForInstanceRoleUses: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForMfaForUsers: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForRequiredTags: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForRestrictedSsh: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForUnrestrictedPorts: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForVpcDefaultSecurityGroupss: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForVpcFlowLogs: No Metadata.com.aws.cloudformation.Context block found.; ConfigRuleForVpcPeeringRouteTabless: No Metadata.com.aws.cloudformation.Context block found.; ConsoleLoginFailureCloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; ConsoleLoginFailureCloudWatchMetric: No Metadata.com.aws.cloudformation.Context block found.; ConsoleSigninWithoutMFACloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; ConsoleSigninWithoutMfaCloudWatchMetric: No Metadata.com.aws.cloudformation.Context block found.; DetectConfigChanges: No Metadata.com.aws.cloudformation.Context block found.; DetectS3BucketPolicyChanges: No Metadata.com.aws.cloudformation.Context block found.; Ec2TerminationCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; EvaluateConfigInAllRegionsFunctionPermission: No Metadata.com.aws.cloudformation.Context block found.; EvaluateRootAccountFunctionPermission: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateCloudTrailBucketRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateCloudTrailLogIntegrityRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateCloudTrailRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateConfigInAllRegionsRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateKeyRotationRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluatePolicyPermissionsRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateRootAccountRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForEvaluateUserPolicyAssociationRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForInstanceRoleUseRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForRoleForMfaOnUsersRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForVpcDefaultSecurityGroupsRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForVpcFlowLogRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionForVpcPeeringRouteTablesRule: No Metadata.com.aws.cloudformation.Context block found.; FunctionToDisableUnusedCredentials: No Metadata.com.aws.cloudformation.Context block found.; FunctionToFormatCloudWatchEvent: No Metadata.com.aws.cloudformation.Context block found.; FunctiontForEvaluateCisBenchmarkingPreconditions: No Metadata.com.aws.cloudformation.Context block found.; GetCloudTrailCloudWatchLog: No Metadata.com.aws.cloudformation.Context block found.; IAMRootActivityCloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; IAMRootActivityCloudWatchMetric: No Metadata.com.aws.cloudformation.Context block found.; IamPolicyChangesCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; KMSCustomerKeyDeletionCloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; KMSCustomerKeyDeletionCloudWatchMetric: No Metadata.com.aws.cloudformation.Context block found.; KmsKeyUseCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; LambdaPermissionForCloudTrailCloudWatchEventRules: No Metadata.com.aws.cloudformation.Context block found.; LambdaPermissionForDisableUnusedCredentials: No Metadata.com.aws.cloudformation.Context block found.; MasterConfigRole: No Metadata.com.aws.cloudformation.Context block found.; NetworkAclChangesCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; NetworkChangeCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; ResourceForEvaluateCisBenchmarkingPreconditions: No Metadata.com.aws.cloudformation.Context block found.; ResourceForGetCloudTrailCloudWatchLog: No Metadata.com.aws.cloudformation.Context block found.; RoleForCloudWatchEvents: No Metadata.com.aws.cloudformation.Context block found.; RoleForDisableUnusedCredentialsFunction: No Metadata.com.aws.cloudformation.Context block found.; ScheduledRuleForDisableUnusedCredentials: No Metadata.com.aws.cloudformation.Context block found.; SecurityGroupChangesCloudWatchEventRule: No Metadata.com.aws.cloudformation.Context block found.; SnsTopicForCloudWatchEvents: No Metadata.com.aws.cloudformation.Context block found.; UnauthorizedAttemptCloudWatchAlarm: No Metadata.com.aws.cloudformation.Context block found.; UnauthorizedAttemptsCloudWatchFilter: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "BillingChangeCloudWatchEventRule", + "entityType": "Resource", + "resourceType": "AWS::Events::Rule" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 2043, + "startColumn": 5, + "endLine": 2043, + "endColumn": 37, + "relatedResources": [ + { + "resource": { + "id": "BillingChangesCloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 2199, + "startColumn": 5, + "endLine": 2199, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "BillingChangesCloudWatchFilter", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 2181, + "startColumn": 5, + "endLine": 2181, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CloudTrailCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1982, + "startColumn": 5, + "endLine": 1982, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluateCloudTrailBucketLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1085, + "startColumn": 5, + "endLine": 1085, + "endColumn": 57 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluateCloudTrailLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 969, + "startColumn": 5, + "endLine": 969, + "endColumn": 51 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluateCloudTrailLogIntegrityLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1181, + "startColumn": 5, + "endLine": 1181, + "endColumn": 63 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluateKeyRotationLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1360, + "startColumn": 5, + "endLine": 1360, + "endColumn": 52 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluatePolicyPermissionsLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 763, + "startColumn": 5, + "endLine": 763, + "endColumn": 58 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallEvaluateUserPolicyAssociationLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 853, + "startColumn": 5, + "endLine": 853, + "endColumn": 62 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallInstanceRoleUseLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1263, + "startColumn": 5, + "endLine": 1263, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallMfaForUsersLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 669, + "startColumn": 5, + "endLine": 669, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallVpcDefaultSecurityGroupsLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 554, + "startColumn": 5, + "endLine": 554, + "endColumn": 57 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallVpcFlowLogLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 484, + "startColumn": 5, + "endLine": 484, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigPermissionToCallVpcPeeringRouteTablesLambda", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1553, + "startColumn": 5, + "endLine": 1553, + "endColumn": 54 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEncryptedVolumes", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 369, + "startColumn": 5, + "endLine": 369, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateCloudTrail", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 977, + "startColumn": 5, + "endLine": 977, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateCloudTrailBucket", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1093, + "startColumn": 5, + "endLine": 1093, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateCloudTrailLogIntegrity", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1190, + "startColumn": 5, + "endLine": 1190, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateConfigInAllRegions", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1476, + "startColumn": 5, + "endLine": 1476, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateKeyRotations", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1369, + "startColumn": 5, + "endLine": 1369, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluatePolicyPermissions", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 771, + "startColumn": 5, + "endLine": 771, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateRootAccount", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 321, + "startColumn": 5, + "endLine": 321, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForEvaluateUserPolicyAssociations", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 861, + "startColumn": 5, + "endLine": 861, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForIamPasswordPolicy", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 198, + "startColumn": 5, + "endLine": 198, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForInstanceRoleUses", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1272, + "startColumn": 5, + "endLine": 1272, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForMfaForUsers", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 677, + "startColumn": 5, + "endLine": 677, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForRequiredTags", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 338, + "startColumn": 5, + "endLine": 338, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForRestrictedSsh", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 385, + "startColumn": 5, + "endLine": 385, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForUnrestrictedPorts", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 401, + "startColumn": 5, + "endLine": 401, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForVpcDefaultSecurityGroupss", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 562, + "startColumn": 5, + "endLine": 562, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForVpcFlowLogs", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 582, + "startColumn": 5, + "endLine": 582, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConfigRuleForVpcPeeringRouteTabless", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 1561, + "startColumn": 5, + "endLine": 1561, + "endColumn": 40 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConsoleLoginFailureCloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 1772, + "startColumn": 5, + "endLine": 1772, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConsoleLoginFailureCloudWatchMetric", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 1754, + "startColumn": 5, + "endLine": 1754, + "endColumn": 40 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConsoleSigninWithoutMFACloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 1735, + "startColumn": 5, + "endLine": 1735, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ConsoleSigninWithoutMfaCloudWatchMetric", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 1716, + "startColumn": 5, + "endLine": 1716, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DetectConfigChanges", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1934, + "startColumn": 5, + "endLine": 1934, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "DetectS3BucketPolicyChanges", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1904, + "startColumn": 5, + "endLine": 1904, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Ec2TerminationCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2067, + "startColumn": 5, + "endLine": 2067, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EvaluateConfigInAllRegionsFunctionPermission", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1468, + "startColumn": 5, + "endLine": 1468, + "endColumn": 49 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "EvaluateRootAccountFunctionPermission", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 312, + "startColumn": 5, + "endLine": 312, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateCloudTrailBucketRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 997, + "startColumn": 5, + "endLine": 997, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateCloudTrailLogIntegrityRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1113, + "startColumn": 5, + "endLine": 1113, + "endColumn": 50 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateCloudTrailRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 884, + "startColumn": 5, + "endLine": 884, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateConfigInAllRegionsRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1392, + "startColumn": 5, + "endLine": 1392, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateKeyRotationRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1295, + "startColumn": 5, + "endLine": 1295, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluatePolicyPermissionsRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 697, + "startColumn": 5, + "endLine": 697, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateRootAccountRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 224, + "startColumn": 5, + "endLine": 224, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForEvaluateUserPolicyAssociationRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 793, + "startColumn": 5, + "endLine": 793, + "endColumn": 49 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForInstanceRoleUseRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1210, + "startColumn": 5, + "endLine": 1210, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForRoleForMfaOnUsersRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 604, + "startColumn": 5, + "endLine": 604, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForVpcDefaultSecurityGroupsRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 495, + "startColumn": 5, + "endLine": 495, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForVpcFlowLogRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 419, + "startColumn": 5, + "endLine": 419, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionForVpcPeeringRouteTablesRule", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1497, + "startColumn": 5, + "endLine": 1497, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionToDisableUnusedCredentials", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 2251, + "startColumn": 5, + "endLine": 2251, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctionToFormatCloudWatchEvent", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1854, + "startColumn": 5, + "endLine": 1854, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "FunctiontForEvaluateCisBenchmarkingPreconditions", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 119, + "startColumn": 5, + "endLine": 119, + "endColumn": 53 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GetCloudTrailCloudWatchLog", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 1599, + "startColumn": 5, + "endLine": 1599, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IAMRootActivityCloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 1697, + "startColumn": 5, + "endLine": 1697, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IAMRootActivityCloudWatchMetric", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 1679, + "startColumn": 5, + "endLine": 1679, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamPolicyChangesCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2005, + "startColumn": 5, + "endLine": 2005, + "endColumn": 40 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KMSCustomerKeyDeletionCloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 1809, + "startColumn": 5, + "endLine": 1809, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KMSCustomerKeyDeletionCloudWatchMetric", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 1791, + "startColumn": 5, + "endLine": 1791, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KmsKeyUseCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 1960, + "startColumn": 5, + "endLine": 1960, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaPermissionForCloudTrailCloudWatchEventRules", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 1892, + "startColumn": 5, + "endLine": 1892, + "endColumn": 54 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaPermissionForDisableUnusedCredentials", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 2337, + "startColumn": 5, + "endLine": 2337, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "MasterConfigRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 76, + "startColumn": 5, + "endLine": 76, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NetworkAclChangesCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2117, + "startColumn": 5, + "endLine": 2117, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NetworkChangeCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2148, + "startColumn": 5, + "endLine": 2148, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ResourceForEvaluateCisBenchmarkingPreconditions", + "resourceType": "Custom::ResourceForEvaluateCisBenchmarkingPreconditions" + }, + "location": { + "startLine": 179, + "startColumn": 5, + "endLine": 179, + "endColumn": 52 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ResourceForGetCloudTrailCloudWatchLog", + "resourceType": "Custom::ResourceForGetCloudTrailCloudWatchLog" + }, + "location": { + "startLine": 1636, + "startColumn": 5, + "endLine": 1636, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RoleForCloudWatchEvents", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1828, + "startColumn": 5, + "endLine": 1828, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "RoleForDisableUnusedCredentialsFunction", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 2218, + "startColumn": 5, + "endLine": 2218, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ScheduledRuleForDisableUnusedCredentials", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2346, + "startColumn": 5, + "endLine": 2346, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SecurityGroupChangesCloudWatchEventRule", + "resourceType": "AWS::Events::Rule" + }, + "location": { + "startLine": 2089, + "startColumn": 5, + "endLine": 2089, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SnsTopicForCloudWatchEvents", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1585, + "startColumn": 5, + "endLine": 1585, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnauthorizedAttemptCloudWatchAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 1659, + "startColumn": 5, + "endLine": 1659, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "UnauthorizedAttemptsCloudWatchFilter", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 1645, + "startColumn": 5, + "endLine": 1645, + "endColumn": 41 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -236036,7 +300894,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 5, + "warnings": 7, "informational": 16, "debug": 0 }, @@ -236187,6 +301045,190 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 2, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): rAMIComplianceFunction: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailValidationFunction: No Metadata.com.aws.cloudformation.Context block found.; rConfigPermissionToCallLambdaAMICompliance: No Metadata.com.aws.cloudformation.Context block found.; rConfigPermissionToCallLambdaCloudTrail: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForAMICompliance: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForCloudTrail: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForRequiredTags: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForSSH: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForUnrestrictedPorts: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaPolicy: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaProfile: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 139, + "startColumn": 3, + "endLine": 139, + "endColumn": 26, + "relatedResources": [ + { + "resource": { + "id": "rCloudTrailValidationFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 237, + "startColumn": 3, + "endLine": 237, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigPermissionToCallLambdaAMICompliance", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 226, + "startColumn": 3, + "endLine": 226, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigPermissionToCallLambdaCloudTrail", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 319, + "startColumn": 3, + "endLine": 319, + "endColumn": 43 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForAMICompliance", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 201, + "startColumn": 3, + "endLine": 201, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForCloudTrail", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 298, + "startColumn": 3, + "endLine": 298, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForRequiredTags", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 59, + "startColumn": 3, + "endLine": 59, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForSSH", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 45, + "startColumn": 3, + "endLine": 45, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForUnrestrictedPorts", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 79, + "startColumn": 3, + "endLine": 79, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 113, + "startColumn": 3, + "endLine": 113, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 97, + "startColumn": 3, + "endLine": 97, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -236552,7 +301594,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 8, "debug": 0 }, @@ -236659,6 +301701,268 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 2, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (18 resource(s)): rIAMAdminGroup: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminRole: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsGroup: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsPolicy: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsProfile: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsRole: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminGroup: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminRole: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyBillingGroup: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyBillingPolicy: No Metadata.com.aws.cloudformation.Context block found.; rSysAdmin: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminGroup", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "rIAMAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 150, + "startColumn": 3, + "endLine": 150, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 137, + "startColumn": 3, + "endLine": 137, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 117, + "startColumn": 3, + "endLine": 117, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 182, + "startColumn": 3, + "endLine": 182, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 221, + "startColumn": 3, + "endLine": 221, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 209, + "startColumn": 3, + "endLine": 209, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 189, + "startColumn": 3, + "endLine": 189, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 294, + "startColumn": 3, + "endLine": 294, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 333, + "startColumn": 3, + "endLine": 333, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 322, + "startColumn": 3, + "endLine": 322, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyBillingGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 420, + "startColumn": 3, + "endLine": 420, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyBillingPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 428, + "startColumn": 3, + "endLine": 428, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdmin", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 61, + "startColumn": 3, + "endLine": 61, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 43, + "startColumn": 3, + "endLine": 43, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -236838,7 +302142,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 3, + "warnings": 5, "informational": 14, "debug": 0 }, @@ -236903,6 +302207,99 @@ "ruleDescription": "Check if ImageId Parameters have the correct type", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 2, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): AssociateEipNat: No Metadata.com.aws.cloudformation.Context block found.; rEipNat: No Metadata.com.aws.cloudformation.Context block found.; rNatInstance: No Metadata.com.aws.cloudformation.Context block found.; rNatInstanceEni: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdPrivateNatInstance: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AssociateEipNat", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 19, + "relatedResources": [ + { + "resource": { + "id": "rEipNat", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 69, + "startColumn": 3, + "endLine": 69, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNatInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 93, + "startColumn": 3, + "endLine": 93, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNatInstanceEni", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "location": { + "startLine": 75, + "startColumn": 3, + "endLine": 75, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdPrivateNatInstance", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 154, + "startColumn": 3, + "endLine": 154, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -237219,7 +302616,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 81, + "warnings": 83, "informational": 76, "debug": 0 }, @@ -238813,6 +304210,398 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 37, + "startColumn": 1, + "endLine": 37, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (28 resource(s)): rAutoScalingConfigApp: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingConfigWeb: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingDownApp: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingDownWeb: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingGroupApp: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingGroupWeb: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingUpApp: No Metadata.com.aws.cloudformation.Context block found.; rAutoScalingUpWeb: No Metadata.com.aws.cloudformation.Context block found.; rCWAlarmHighCPUApp: No Metadata.com.aws.cloudformation.Context block found.; rCWAlarmHighCPUWeb: No Metadata.com.aws.cloudformation.Context block found.; rCWAlarmLowCPUApp: No Metadata.com.aws.cloudformation.Context block found.; rCWAlarmLowCPUWeb: No Metadata.com.aws.cloudformation.Context block found.; rDBSubnetGroup: No Metadata.com.aws.cloudformation.Context block found.; rELBApp: No Metadata.com.aws.cloudformation.Context block found.; rELBWeb: No Metadata.com.aws.cloudformation.Context block found.; rPostProcInstance: No Metadata.com.aws.cloudformation.Context block found.; rPostProcInstanceProfile: No Metadata.com.aws.cloudformation.Context block found.; rPostProcInstanceRole: No Metadata.com.aws.cloudformation.Context block found.; rRDSInstanceMySQL: No Metadata.com.aws.cloudformation.Context block found.; rS3AccessLogsPolicy: No Metadata.com.aws.cloudformation.Context block found.; rS3ELBAccessLogs: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupApp: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupAppInstance: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupRDS: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupWeb: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupWebInstance: No Metadata.com.aws.cloudformation.Context block found.; rWebContentBucket: No Metadata.com.aws.cloudformation.Context block found.; rWebContentS3Policy: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rAutoScalingConfigApp", + "entityType": "Resource", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 220, + "startColumn": 5, + "endLine": 220, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "rAutoScalingConfigWeb", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 420, + "startColumn": 5, + "endLine": 420, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingDownApp", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 560, + "startColumn": 3, + "endLine": 560, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingDownWeb", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 568, + "startColumn": 3, + "endLine": 568, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingGroupApp", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 576, + "startColumn": 3, + "endLine": 576, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingGroupWeb", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 602, + "startColumn": 3, + "endLine": 602, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingUpApp", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 628, + "startColumn": 3, + "endLine": 628, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAutoScalingUpWeb", + "resourceType": "AWS::AutoScaling::ScalingPolicy" + }, + "location": { + "startLine": 636, + "startColumn": 3, + "endLine": 636, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCWAlarmHighCPUApp", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 644, + "startColumn": 3, + "endLine": 644, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCWAlarmHighCPUWeb", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 662, + "startColumn": 3, + "endLine": 662, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCWAlarmLowCPUApp", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 680, + "startColumn": 3, + "endLine": 680, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCWAlarmLowCPUWeb", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 697, + "startColumn": 3, + "endLine": 697, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBSubnetGroup", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 715, + "startColumn": 3, + "endLine": 715, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rELBApp", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 722, + "startColumn": 3, + "endLine": 722, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rELBWeb", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 758, + "startColumn": 3, + "endLine": 758, + "endColumn": 10 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rPostProcInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 793, + "startColumn": 3, + "endLine": 793, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rPostProcInstanceProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 953, + "startColumn": 3, + "endLine": 953, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rPostProcInstanceRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 959, + "startColumn": 3, + "endLine": 959, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRDSInstanceMySQL", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 1002, + "startColumn": 3, + "endLine": 1002, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rS3AccessLogsPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 1026, + "startColumn": 3, + "endLine": 1026, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rS3ELBAccessLogs", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 1060, + "startColumn": 3, + "endLine": 1060, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupApp", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1065, + "startColumn": 3, + "endLine": 1065, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupAppInstance", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1092, + "startColumn": 3, + "endLine": 1092, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupRDS", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1120, + "startColumn": 3, + "endLine": 1120, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupWeb", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1138, + "startColumn": 3, + "endLine": 1138, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupWebInstance", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1149, + "startColumn": 3, + "endLine": 1149, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rWebContentBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 1177, + "startColumn": 3, + "endLine": 1177, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rWebContentS3Policy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 1196, + "startColumn": 3, + "endLine": 1196, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -240478,7 +306267,7 @@ "counts": { "fatal": 0, "errors": 2, - "warnings": 5, + "warnings": 7, "informational": 16, "debug": 0 }, @@ -240629,6 +306418,190 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 14, + "startColumn": 1, + "endLine": 14, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (12 resource(s)): rAMIComplianceFunction: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailValidationFunction: No Metadata.com.aws.cloudformation.Context block found.; rConfigPermissionToCallLambdaAMICompliance: No Metadata.com.aws.cloudformation.Context block found.; rConfigPermissionToCallLambdaCloudTrail: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForAMICompliance: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForCloudTrail: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForRequiredTags: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForSSH: No Metadata.com.aws.cloudformation.Context block found.; rConfigRuleForUnrestrictedPorts: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaPolicy: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaProfile: No Metadata.com.aws.cloudformation.Context block found.; rConfigRulesLambdaRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rAMIComplianceFunction", + "entityType": "Resource", + "resourceType": "AWS::Lambda::Function" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 25, + "relatedResources": [ + { + "resource": { + "id": "rCloudTrailValidationFunction", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 97, + "startColumn": 3, + "endLine": 97, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigPermissionToCallLambdaAMICompliance", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 162, + "startColumn": 3, + "endLine": 162, + "endColumn": 45 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigPermissionToCallLambdaCloudTrail", + "resourceType": "AWS::Lambda::Permission" + }, + "location": { + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 42 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForAMICompliance", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 181, + "startColumn": 3, + "endLine": 181, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForCloudTrail", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 202, + "startColumn": 3, + "endLine": 202, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForRequiredTags", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 220, + "startColumn": 3, + "endLine": 220, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForSSH", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 236, + "startColumn": 3, + "endLine": 236, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRuleForUnrestrictedPorts", + "resourceType": "AWS::Config::ConfigRule" + }, + "location": { + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaPolicy", + "resourceType": "AWS::IAM::Policy" + }, + "location": { + "startLine": 263, + "startColumn": 3, + "endLine": 263, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 275, + "startColumn": 3, + "endLine": 275, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rConfigRulesLambdaRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 281, + "startColumn": 3, + "endLine": 281, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -240994,7 +306967,7 @@ "counts": { "fatal": 0, "errors": 5, - "warnings": 35, + "warnings": 37, "informational": 18, "debug": 0 }, @@ -241810,6 +307783,112 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 121, + "startColumn": 1, + "endLine": 121, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (6 resource(s)): ApplicationTemplate: No Metadata.com.aws.cloudformation.Context block found.; ConfigRulesTemplate: No Metadata.com.aws.cloudformation.Context block found.; IamTemplate: No Metadata.com.aws.cloudformation.Context block found.; LoggingTemplate: No Metadata.com.aws.cloudformation.Context block found.; ManagementVpcTemplate: No Metadata.com.aws.cloudformation.Context block found.; ProductionVpcTemplate: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "ApplicationTemplate", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 276, + "startColumn": 3, + "endLine": 276, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "ConfigRulesTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "IamTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LoggingTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 423, + "startColumn": 3, + "endLine": 423, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ManagementVpcTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 444, + "startColumn": 3, + "endLine": 444, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "ProductionVpcTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 525, + "startColumn": 3, + "endLine": 525, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -242157,7 +308236,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 5, + "warnings": 7, "informational": 8, "debug": 0 }, @@ -242264,6 +308343,268 @@ "ruleDescription": "Check obsolete DependsOn configuration for Resources", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (18 resource(s)): rIAMAdminGroup: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rIAMAdminRole: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsGroup: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsPolicy: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsProfile: No Metadata.com.aws.cloudformation.Context block found.; rInstanceOpsRole: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminGroup: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyAdminRole: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyBillingGroup: No Metadata.com.aws.cloudformation.Context block found.; rReadOnlyBillingPolicy: No Metadata.com.aws.cloudformation.Context block found.; rSysAdmin: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminPolicy: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminProfile: No Metadata.com.aws.cloudformation.Context block found.; rSysAdminRole: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rIAMAdminGroup", + "entityType": "Resource", + "resourceType": "AWS::IAM::Group" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 33, + "startColumn": 3, + "endLine": 33, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "rIAMAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 37, + "startColumn": 3, + "endLine": 37, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 63, + "startColumn": 3, + "endLine": 63, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 136, + "startColumn": 3, + "endLine": 136, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rInstanceOpsRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 143, + "startColumn": 3, + "endLine": 143, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 154, + "startColumn": 3, + "endLine": 154, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 235, + "startColumn": 3, + "endLine": 235, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 242, + "startColumn": 3, + "endLine": 242, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyBillingGroup", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 253, + "startColumn": 3, + "endLine": 253, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rReadOnlyBillingPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 257, + "startColumn": 3, + "endLine": 257, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdmin", + "resourceType": "AWS::IAM::Group" + }, + "location": { + "startLine": 271, + "startColumn": 3, + "endLine": 271, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminPolicy", + "resourceType": "AWS::IAM::ManagedPolicy" + }, + "location": { + "startLine": 275, + "startColumn": 3, + "endLine": 275, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 311, + "startColumn": 3, + "endLine": 311, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSysAdminRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 318, + "startColumn": 3, + "endLine": 318, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -242443,7 +308784,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 39, + "warnings": 41, "informational": 35, "debug": 0 }, @@ -243252,6 +309593,346 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 12, + "startColumn": 1, + "endLine": 12, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (24 resource(s)): rArchiveLogsBucket: No Metadata.com.aws.cloudformation.Context block found.; rArchiveLogsBucketPolicy: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailBucket: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailChange: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailChangeAlarm: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailLogGroup: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailLoggingLocal: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailProfile: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailRole: No Metadata.com.aws.cloudformation.Context block found.; rCloudTrailS3Policy: No Metadata.com.aws.cloudformation.Context block found.; rCloudWatchLogsRole: No Metadata.com.aws.cloudformation.Context block found.; rIAMCreateAccessKey: No Metadata.com.aws.cloudformation.Context block found.; rIAMCreateAccessKeyAlarm: No Metadata.com.aws.cloudformation.Context block found.; rIAMPolicyChangesAlarm: No Metadata.com.aws.cloudformation.Context block found.; rIAMPolicyChangesMetricFilter: No Metadata.com.aws.cloudformation.Context block found.; rIAMRootActivity: No Metadata.com.aws.cloudformation.Context block found.; rNetworkAclChangesAlarm: No Metadata.com.aws.cloudformation.Context block found.; rNetworkAclChangesMetricFilter: No Metadata.com.aws.cloudformation.Context block found.; rRootActivityAlarm: No Metadata.com.aws.cloudformation.Context block found.; rSecurityAlarmTopic: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupChangesAlarm: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupChangesMetricFilter: No Metadata.com.aws.cloudformation.Context block found.; rUnauthorizedAttemptAlarm: No Metadata.com.aws.cloudformation.Context block found.; rUnauthorizedAttempts: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rArchiveLogsBucket", + "entityType": "Resource", + "resourceType": "AWS::S3::Bucket" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 41, + "startColumn": 3, + "endLine": 41, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "rArchiveLogsBucketPolicy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailBucket", + "resourceType": "AWS::S3::Bucket" + }, + "location": { + "startLine": 119, + "startColumn": 3, + "endLine": 119, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailChange", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailChangeAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailLogGroup", + "resourceType": "AWS::Logs::LogGroup" + }, + "location": { + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailLoggingLocal", + "resourceType": "AWS::CloudTrail::Trail" + }, + "location": { + "startLine": 162, + "startColumn": 3, + "endLine": 162, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 179, + "startColumn": 3, + "endLine": 179, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 186, + "startColumn": 3, + "endLine": 186, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudTrailS3Policy", + "resourceType": "AWS::S3::BucketPolicy" + }, + "location": { + "startLine": 231, + "startColumn": 3, + "endLine": 231, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rCloudWatchLogsRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 324, + "startColumn": 3, + "endLine": 324, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMCreateAccessKey", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 379, + "startColumn": 3, + "endLine": 379, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMCreateAccessKeyAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 390, + "startColumn": 3, + "endLine": 390, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMPolicyChangesAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 406, + "startColumn": 3, + "endLine": 406, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMPolicyChangesMetricFilter", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 421, + "startColumn": 3, + "endLine": 421, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIAMRootActivity", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 431, + "startColumn": 3, + "endLine": 431, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNetworkAclChangesAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNetworkAclChangesMetricFilter", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 457, + "startColumn": 3, + "endLine": 457, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRootActivityAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 470, + "startColumn": 3, + "endLine": 470, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityAlarmTopic", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 485, + "startColumn": 3, + "endLine": 485, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupChangesAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 492, + "startColumn": 3, + "endLine": 492, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupChangesMetricFilter", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 508, + "startColumn": 3, + "endLine": 508, + "endColumn": 36 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rUnauthorizedAttemptAlarm", + "resourceType": "AWS::CloudWatch::Alarm" + }, + "location": { + "startLine": 521, + "startColumn": 3, + "endLine": 521, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rUnauthorizedAttempts", + "resourceType": "AWS::Logs::MetricFilter" + }, + "location": { + "startLine": 536, + "startColumn": 3, + "endLine": 536, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -244043,7 +310724,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 27, + "warnings": 29, "informational": 76, "debug": 0 }, @@ -244591,6 +311272,463 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 106, + "startColumn": 1, + "endLine": 106, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (33 resource(s)): AssociaterEIPProdBastion: No Metadata.com.aws.cloudformation.Context block found.; rDHCPOptionsAssocMgmt: No Metadata.com.aws.cloudformation.Context block found.; rDHCPoptions: No Metadata.com.aws.cloudformation.Context block found.; rDeepSecurityInfrastructureTemplate: No Metadata.com.aws.cloudformation.Context block found.; rEIPProdBastion: No Metadata.com.aws.cloudformation.Context block found.; rEIPProdNAT: No Metadata.com.aws.cloudformation.Context block found.; rENIProductionBastion: No Metadata.com.aws.cloudformation.Context block found.; rGWAttachmentMgmtIGW: No Metadata.com.aws.cloudformation.Context block found.; rIGWManagement: No Metadata.com.aws.cloudformation.Context block found.; rManagementDMZSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rManagementDMZSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rManagementPrivateSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rManagementPrivateSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rMgmtBastionInstance: No Metadata.com.aws.cloudformation.Context block found.; rNATGateway: No Metadata.com.aws.cloudformation.Context block found.; rNatInstanceTemplate: No Metadata.com.aws.cloudformation.Context block found.; rPeeringConnectionProduction: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtDMZA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtPrivA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtPrivB: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtIGW: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtProdDMZ: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtProdPrivate: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdMgmt: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdMgmtPublic: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableMgmtDMZ: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableMgmtPrivate: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupBastion: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupPeered: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupSSHFromMgmt: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupVpcNat: No Metadata.com.aws.cloudformation.Context block found.; rVPCManagement: No Metadata.com.aws.cloudformation.Context block found.; rrRouteAssocMgmtDMZB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AssociaterEIPProdBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 27, + "relatedResources": [ + { + "resource": { + "id": "rDHCPOptionsAssocMgmt", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "location": { + "startLine": 312, + "startColumn": 3, + "endLine": 312, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDHCPoptions", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "location": { + "startLine": 319, + "startColumn": 3, + "endLine": 319, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDeepSecurityInfrastructureTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 332, + "startColumn": 3, + "endLine": 332, + "endColumn": 38 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rEIPProdBastion", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 393, + "startColumn": 3, + "endLine": 393, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rEIPProdNAT", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 398, + "startColumn": 3, + "endLine": 398, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rENIProductionBastion", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "location": { + "startLine": 404, + "startColumn": 3, + "endLine": 404, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rGWAttachmentMgmtIGW", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 416, + "startColumn": 3, + "endLine": 416, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIGWManagement", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 424, + "startColumn": 3, + "endLine": 424, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementDMZSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 430, + "startColumn": 3, + "endLine": 430, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementDMZSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementPrivateSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 454, + "startColumn": 3, + "endLine": 454, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementPrivateSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 466, + "startColumn": 3, + "endLine": 466, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rMgmtBastionInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 482, + "startColumn": 5, + "endLine": 482, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNATGateway", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 545, + "startColumn": 3, + "endLine": 545, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNatInstanceTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 556, + "startColumn": 3, + "endLine": 556, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rPeeringConnectionProduction", + "resourceType": "AWS::EC2::VPCPeeringConnection" + }, + "location": { + "startLine": 585, + "startColumn": 3, + "endLine": 585, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtDMZA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 596, + "startColumn": 3, + "endLine": 596, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtPrivA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 603, + "startColumn": 3, + "endLine": 603, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtPrivB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 610, + "startColumn": 3, + "endLine": 610, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtIGW", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 617, + "startColumn": 3, + "endLine": 617, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtProdDMZ", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 625, + "startColumn": 3, + "endLine": 625, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtProdPrivate", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 635, + "startColumn": 3, + "endLine": 635, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdMgmt", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 645, + "startColumn": 3, + "endLine": 645, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdMgmtPublic", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 655, + "startColumn": 3, + "endLine": 655, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableMgmtDMZ", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 665, + "startColumn": 3, + "endLine": 665, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableMgmtPrivate", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 673, + "startColumn": 3, + "endLine": 673, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupBastion", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 681, + "startColumn": 3, + "endLine": 681, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupPeered", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 701, + "startColumn": 3, + "endLine": 701, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupSSHFromMgmt", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 715, + "startColumn": 3, + "endLine": 715, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupVpcNat", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 730, + "startColumn": 3, + "endLine": 730, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rVPCManagement", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 750, + "startColumn": 3, + "endLine": 750, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rrRouteAssocMgmtDMZB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 762, + "startColumn": 3, + "endLine": 762, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -246316,7 +313454,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 60, + "warnings": 62, "informational": 99, "debug": 0 }, @@ -247514,6 +314652,632 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 13, + "startColumn": 1, + "endLine": 13, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (46 resource(s)): rAppPrivateSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rAppPrivateSubnetAssociationA: No Metadata.com.aws.cloudformation.Context block found.; rAppPrivateSubnetAssociationB: No Metadata.com.aws.cloudformation.Context block found.; rAppPrivateSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rDBPrivateSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rDBPrivateSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rDHCPOptionsAssocProd: No Metadata.com.aws.cloudformation.Context block found.; rDHCPoptions: No Metadata.com.aws.cloudformation.Context block found.; rDMZSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rDMZSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rEIPProdNAT: No Metadata.com.aws.cloudformation.Context block found.; rGWAttachmentProdIGW: No Metadata.com.aws.cloudformation.Context block found.; rIGWProd: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocAppPrivSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocAppPrivSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocDBPrivSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocDBPrivSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocDMZPubSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rNACLAssocDMZPubSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rNACLPrivate: No Metadata.com.aws.cloudformation.Context block found.; rNACLPublic: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowALLEgressPublic: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowALLfromPrivEgress: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowAllReturnTCP: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowAllTCPInternal: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowAllTCPInternalEgress: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowBastionSSHAccess: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowEgressReturnTCP: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowHTTPSPublic: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowHTTPfromProd: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowMgmtAccessSSHtoPrivate: No Metadata.com.aws.cloudformation.Context block found.; rNACLRuleAllowReturnTCPPriv: No Metadata.com.aws.cloudformation.Context block found.; rNATGateway: No Metadata.com.aws.cloudformation.Context block found.; rNatInstanceTemplate: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocDBPrivateA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocDBPrivateB: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocProdDMZA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocProdDMZB: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdIGW: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdPrivateNatGateway: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableMain: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableProdPrivate: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupMgmtBastion: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupSSHFromProd: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupVpcNat: No Metadata.com.aws.cloudformation.Context block found.; rVPCProduction: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rAppPrivateSubnetA", + "entityType": "Resource", + "resourceType": "AWS::EC2::Subnet" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 178, + "startColumn": 3, + "endLine": 178, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "rAppPrivateSubnetAssociationA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 193, + "startColumn": 3, + "endLine": 193, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAppPrivateSubnetAssociationB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 200, + "startColumn": 3, + "endLine": 200, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rAppPrivateSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 207, + "startColumn": 3, + "endLine": 207, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBPrivateSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 222, + "startColumn": 3, + "endLine": 222, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBPrivateSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 237, + "startColumn": 3, + "endLine": 237, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDHCPOptionsAssocProd", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "location": { + "startLine": 252, + "startColumn": 3, + "endLine": 252, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDHCPoptions", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "location": { + "startLine": 259, + "startColumn": 3, + "endLine": 259, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDMZSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 272, + "startColumn": 3, + "endLine": 272, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDMZSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 287, + "startColumn": 3, + "endLine": 287, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rEIPProdNAT", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rGWAttachmentProdIGW", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 307, + "startColumn": 3, + "endLine": 307, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIGWProd", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 315, + "startColumn": 3, + "endLine": 315, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocAppPrivSubnetA", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 324, + "startColumn": 3, + "endLine": 324, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocAppPrivSubnetB", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 331, + "startColumn": 3, + "endLine": 331, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocDBPrivSubnetA", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 338, + "startColumn": 3, + "endLine": 338, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocDBPrivSubnetB", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 345, + "startColumn": 3, + "endLine": 345, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocDMZPubSubnetA", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 352, + "startColumn": 3, + "endLine": 352, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLAssocDMZPubSubnetB", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 359, + "startColumn": 3, + "endLine": 359, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLPrivate", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 366, + "startColumn": 3, + "endLine": 366, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLPublic", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 371, + "startColumn": 3, + "endLine": 371, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowALLEgressPublic", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 376, + "startColumn": 3, + "endLine": 376, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowALLfromPrivEgress", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 389, + "startColumn": 3, + "endLine": 389, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowAllReturnTCP", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 402, + "startColumn": 3, + "endLine": 402, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowAllTCPInternal", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 414, + "startColumn": 3, + "endLine": 414, + "endColumn": 31 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowAllTCPInternalEgress", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 427, + "startColumn": 3, + "endLine": 427, + "endColumn": 37 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowBastionSSHAccess", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 440, + "startColumn": 3, + "endLine": 440, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowEgressReturnTCP", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 452, + "startColumn": 3, + "endLine": 452, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowHTTPSPublic", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 465, + "startColumn": 3, + "endLine": 465, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowHTTPfromProd", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 477, + "startColumn": 3, + "endLine": 477, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowMgmtAccessSSHtoPrivate", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNACLRuleAllowReturnTCPPriv", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 503, + "startColumn": 3, + "endLine": 503, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNATGateway", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 515, + "startColumn": 3, + "endLine": 515, + "endColumn": 14 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNatInstanceTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 526, + "startColumn": 3, + "endLine": 526, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocDBPrivateA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 555, + "startColumn": 3, + "endLine": 555, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocDBPrivateB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 562, + "startColumn": 3, + "endLine": 562, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocProdDMZA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 569, + "startColumn": 3, + "endLine": 569, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocProdDMZB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 576, + "startColumn": 3, + "endLine": 576, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdIGW", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 583, + "startColumn": 3, + "endLine": 583, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdPrivateNatGateway", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 592, + "startColumn": 3, + "endLine": 592, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableMain", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 601, + "startColumn": 3, + "endLine": 601, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableProdPrivate", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 609, + "startColumn": 3, + "endLine": 609, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupMgmtBastion", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 617, + "startColumn": 3, + "endLine": 617, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupSSHFromProd", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 635, + "startColumn": 3, + "endLine": 635, + "endColumn": 28 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupVpcNat", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 653, + "startColumn": 3, + "endLine": 653, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rVPCProduction", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 676, + "startColumn": 3, + "endLine": 676, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -249885,7 +317649,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 39, + "warnings": 41, "informational": 75, "debug": 0 }, @@ -250658,6 +318422,281 @@ "ruleDescription": "Hardcoded AMI ID", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 28, + "startColumn": 1, + "endLine": 28, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (19 resource(s)): AnsibleConfigServer: No Metadata.com.aws.cloudformation.Context block found.; ContainerAccessELB: No Metadata.com.aws.cloudformation.Context block found.; GetRSA: No Metadata.com.aws.cloudformation.Context block found.; KeyGen: No Metadata.com.aws.cloudformation.Context block found.; LambdaExecutionRole: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftEtcdASG: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftEtcdLaunchConfig: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftInternalSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftMasterASG: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftMasterASLaunchConfig: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftMasterELB: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftMasterInternalELB: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftNodeASG: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftNodeInternalELB: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftNodeSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftNodesLaunchConfig: No Metadata.com.aws.cloudformation.Context block found.; OpenShiftSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; SetupRole: No Metadata.com.aws.cloudformation.Context block found.; SetupRoleProfile: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AnsibleConfigServer", + "entityType": "Resource", + "resourceType": "AWS::EC2::Instance" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 284, + "startColumn": 5, + "endLine": 284, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "ContainerAccessELB", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 746, + "startColumn": 3, + "endLine": 746, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GetRSA", + "resourceType": "Custom::GenerateKeys" + }, + "location": { + "startLine": 773, + "startColumn": 3, + "endLine": 773, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "KeyGen", + "resourceType": "AWS::Lambda::Function" + }, + "location": { + "startLine": 798, + "startColumn": 3, + "endLine": 798, + "endColumn": 9 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "LambdaExecutionRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 813, + "startColumn": 3, + "endLine": 813, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftEtcdASG", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 841, + "startColumn": 3, + "endLine": 841, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftEtcdLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 861, + "startColumn": 5, + "endLine": 861, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftInternalSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1054, + "startColumn": 3, + "endLine": 1054, + "endColumn": 33 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftMasterASG", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 1063, + "startColumn": 3, + "endLine": 1063, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftMasterASLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 1086, + "startColumn": 5, + "endLine": 1086, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftMasterELB", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 1281, + "startColumn": 3, + "endLine": 1281, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftMasterInternalELB", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 1316, + "startColumn": 3, + "endLine": 1316, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftNodeASG", + "resourceType": "AWS::AutoScaling::AutoScalingGroup" + }, + "location": { + "startLine": 1348, + "startColumn": 3, + "endLine": 1348, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftNodeInternalELB", + "resourceType": "AWS::ElasticLoadBalancing::LoadBalancer" + }, + "location": { + "startLine": 1369, + "startColumn": 3, + "endLine": 1369, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftNodeSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1394, + "startColumn": 3, + "endLine": 1394, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftNodesLaunchConfig", + "resourceType": "AWS::AutoScaling::LaunchConfiguration" + }, + "location": { + "startLine": 1415, + "startColumn": 5, + "endLine": 1415, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "OpenShiftSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 1636, + "startColumn": 3, + "endLine": 1636, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SetupRole", + "resourceType": "AWS::IAM::Role" + }, + "location": { + "startLine": 1656, + "startColumn": 3, + "endLine": 1656, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "SetupRoleProfile", + "resourceType": "AWS::IAM::InstanceProfile" + }, + "location": { + "startLine": 1687, + "startColumn": 3, + "endLine": 1687, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -252316,7 +320355,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 6, "debug": 0 }, @@ -252325,6 +320364,60 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 1, + "endLine": 4, + "endColumn": 9, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (2 resource(s)): OpenShiftStack: No Metadata.com.aws.cloudformation.Context block found.; VPCStack: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "OpenShiftStack", + "entityType": "Resource", + "resourceType": "AWS::CloudFormation::Stack" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 184, + "startColumn": 3, + "endLine": 184, + "endColumn": 17, + "relatedResources": [ + { + "resource": { + "id": "VPCStack", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 242, + "startColumn": 3, + "endLine": 242, + "endColumn": 11 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -252448,7 +320541,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 0, + "warnings": 2, "informational": 13, "debug": 0 }, @@ -252457,6 +320550,99 @@ "severityLevel": "DEBUG" }, "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 54, + "startColumn": 1, + "endLine": 54, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (5 resource(s)): rDBMonitoringRole: No Metadata.com.aws.cloudformation.Context block found.; rDBPassword: No Metadata.com.aws.cloudformation.Context block found.; rDBServerInstance: No Metadata.com.aws.cloudformation.Context block found.; rDBSubnetGroup: No Metadata.com.aws.cloudformation.Context block found.; rParameterGroup: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "rDBMonitoringRole", + "entityType": "Resource", + "resourceType": "AWS::IAM::Role" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 93, + "startColumn": 5, + "endLine": 93, + "endColumn": 22, + "relatedResources": [ + { + "resource": { + "id": "rDBPassword", + "resourceType": "Custom::Secret" + }, + "location": { + "startLine": 82, + "startColumn": 5, + "endLine": 82, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBServerInstance", + "resourceType": "AWS::RDS::DBInstance" + }, + "location": { + "startLine": 123, + "startColumn": 5, + "endLine": 123, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDBSubnetGroup", + "resourceType": "AWS::RDS::DBSubnetGroup" + }, + "location": { + "startLine": 68, + "startColumn": 5, + "endLine": 68, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rParameterGroup", + "resourceType": "AWS::RDS::DBParameterGroup" + }, + "location": { + "startLine": 56, + "startColumn": 5, + "endLine": 56, + "endColumn": 20 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I3011", "severity": "INFO", @@ -252760,7 +320946,7 @@ "counts": { "fatal": 0, "errors": 1, - "warnings": 28, + "warnings": 30, "informational": 76, "debug": 0 }, @@ -253326,6 +321512,463 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 2, + "endLine": 4, + "endColumn": 11, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (33 resource(s)): AssociaterEIPProdBastion: No Metadata.com.aws.cloudformation.Context block found.; rDHCPOptionsAssocMgmt: No Metadata.com.aws.cloudformation.Context block found.; rDHCPoptions: No Metadata.com.aws.cloudformation.Context block found.; rDeepSecurityInfrastructureTemplate: No Metadata.com.aws.cloudformation.Context block found.; rEIPProdBastion: No Metadata.com.aws.cloudformation.Context block found.; rEIPProdNAT: No Metadata.com.aws.cloudformation.Context block found.; rENIProductionBastion: No Metadata.com.aws.cloudformation.Context block found.; rGWAttachmentMgmtIGW: No Metadata.com.aws.cloudformation.Context block found.; rIGWManagement: No Metadata.com.aws.cloudformation.Context block found.; rManagementDMZSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rManagementDMZSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rManagementPrivateSubnetA: No Metadata.com.aws.cloudformation.Context block found.; rManagementPrivateSubnetB: No Metadata.com.aws.cloudformation.Context block found.; rMgmtBastionInstance: No Metadata.com.aws.cloudformation.Context block found.; rNATGateway: No Metadata.com.aws.cloudformation.Context block found.; rNatInstanceTemplate: No Metadata.com.aws.cloudformation.Context block found.; rPeeringConnectionProduction: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtDMZA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtPrivA: No Metadata.com.aws.cloudformation.Context block found.; rRouteAssocMgmtPrivB: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtIGW: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtProdDMZ: No Metadata.com.aws.cloudformation.Context block found.; rRouteMgmtProdPrivate: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdMgmt: No Metadata.com.aws.cloudformation.Context block found.; rRouteProdMgmtPublic: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableMgmtDMZ: No Metadata.com.aws.cloudformation.Context block found.; rRouteTableMgmtPrivate: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupBastion: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupPeered: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupSSHFromMgmt: No Metadata.com.aws.cloudformation.Context block found.; rSecurityGroupVpcNat: No Metadata.com.aws.cloudformation.Context block found.; rVPCManagement: No Metadata.com.aws.cloudformation.Context block found.; rrRouteAssocMgmtDMZB: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "AssociaterEIPProdBastion", + "entityType": "Resource", + "resourceType": "AWS::EC2::EIPAssociation" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 727, + "startColumn": 3, + "endLine": 727, + "endColumn": 28, + "relatedResources": [ + { + "resource": { + "id": "rDHCPOptionsAssocMgmt", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "location": { + "startLine": 828, + "startColumn": 3, + "endLine": 828, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDHCPoptions", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "location": { + "startLine": 538, + "startColumn": 3, + "endLine": 538, + "endColumn": 16 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rDeepSecurityInfrastructureTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 915, + "startColumn": 3, + "endLine": 915, + "endColumn": 39 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rEIPProdBastion", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 720, + "startColumn": 3, + "endLine": 720, + "endColumn": 19 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rEIPProdNAT", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 763, + "startColumn": 3, + "endLine": 763, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rENIProductionBastion", + "resourceType": "AWS::EC2::NetworkInterface" + }, + "location": { + "startLine": 784, + "startColumn": 3, + "endLine": 784, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rGWAttachmentMgmtIGW", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 365, + "startColumn": 3, + "endLine": 365, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rIGWManagement", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 356, + "startColumn": 3, + "endLine": 356, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementDMZSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 465, + "startColumn": 3, + "endLine": 465, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementDMZSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 483, + "startColumn": 3, + "endLine": 483, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementPrivateSubnetA", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 501, + "startColumn": 3, + "endLine": 501, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rManagementPrivateSubnetB", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 519, + "startColumn": 3, + "endLine": 519, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rMgmtBastionInstance", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 676, + "startColumn": 4, + "endLine": 676, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNATGateway", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 771, + "startColumn": 3, + "endLine": 771, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rNatInstanceTemplate", + "resourceType": "AWS::CloudFormation::Stack" + }, + "location": { + "startLine": 377, + "startColumn": 3, + "endLine": 377, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rPeeringConnectionProduction", + "resourceType": "AWS::EC2::VPCPeeringConnection" + }, + "location": { + "startLine": 839, + "startColumn": 3, + "endLine": 839, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtDMZA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 591, + "startColumn": 3, + "endLine": 591, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtPrivA", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 613, + "startColumn": 3, + "endLine": 613, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteAssocMgmtPrivB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 624, + "startColumn": 3, + "endLine": 624, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtIGW", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 579, + "startColumn": 3, + "endLine": 579, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtProdDMZ", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 900, + "startColumn": 3, + "endLine": 900, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteMgmtProdPrivate", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 855, + "startColumn": 3, + "endLine": 855, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdMgmt", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 870, + "startColumn": 3, + "endLine": 870, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteProdMgmtPublic", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 885, + "startColumn": 3, + "endLine": 885, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableMgmtDMZ", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 567, + "startColumn": 3, + "endLine": 567, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rRouteTableMgmtPrivate", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 555, + "startColumn": 3, + "endLine": 555, + "endColumn": 26 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupBastion", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 801, + "startColumn": 3, + "endLine": 801, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupPeered", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 418, + "startColumn": 3, + "endLine": 418, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupSSHFromMgmt", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 742, + "startColumn": 3, + "endLine": 742, + "endColumn": 29 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rSecurityGroupVpcNat", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 437, + "startColumn": 3, + "endLine": 437, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rVPCManagement", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 339, + "startColumn": 3, + "endLine": 339, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "rrRouteAssocMgmtDMZB", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 602, + "startColumn": 3, + "endLine": 602, + "endColumn": 24 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -255051,7 +323694,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 45, + "warnings": 47, "informational": 172, "debug": 0 }, @@ -255951,6 +324594,1035 @@ "ruleDescription": "Property type coercion warning", "phase": "SCHEMA" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 4, + "startColumn": 5, + "endLine": 4, + "endColumn": 14, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (77 resource(s)): DHCPOptions: No Metadata.com.aws.cloudformation.Context block found.; InternetGateway: No Metadata.com.aws.cloudformation.Context block found.; NAT1EIP: No Metadata.com.aws.cloudformation.Context block found.; NAT2EIP: No Metadata.com.aws.cloudformation.Context block found.; NAT3EIP: No Metadata.com.aws.cloudformation.Context block found.; NAT4EIP: No Metadata.com.aws.cloudformation.Context block found.; NATGateway1: No Metadata.com.aws.cloudformation.Context block found.; NATGateway2: No Metadata.com.aws.cloudformation.Context block found.; NATGateway3: No Metadata.com.aws.cloudformation.Context block found.; NATGateway4: No Metadata.com.aws.cloudformation.Context block found.; NATInstance1: No Metadata.com.aws.cloudformation.Context block found.; NATInstance2: No Metadata.com.aws.cloudformation.Context block found.; NATInstance3: No Metadata.com.aws.cloudformation.Context block found.; NATInstance4: No Metadata.com.aws.cloudformation.Context block found.; NATInstanceSecurityGroup: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1A: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1ARoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1ARouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1ARouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1B: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BNetworkAcl: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BNetworkAclAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BNetworkAclEntryInbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BNetworkAclEntryOutbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BRoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BRouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet1BRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2A: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2ARoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2ARouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2ARouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2B: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BNetworkAcl: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BNetworkAclAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BNetworkAclEntryInbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BNetworkAclEntryOutbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BRoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BRouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet2BRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3A: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3ARoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3ARouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3ARouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3B: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BNetworkAcl: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BNetworkAclAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BNetworkAclEntryInbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BNetworkAclEntryOutbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BRoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BRouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet3BRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4A: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4ARoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4ARouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4ARouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4B: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BNetworkAcl: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BNetworkAclAssociation: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BNetworkAclEntryInbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BNetworkAclEntryOutbound: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BRoute: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BRouteTable: No Metadata.com.aws.cloudformation.Context block found.; PrivateSubnet4BRouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet1: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet1RouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet2: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet2RouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet3: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet3RouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet4: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnet4RouteTableAssociation: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnetRoute: No Metadata.com.aws.cloudformation.Context block found.; PublicSubnetRouteTable: No Metadata.com.aws.cloudformation.Context block found.; S3VPCEndpoint: No Metadata.com.aws.cloudformation.Context block found.; VPC: No Metadata.com.aws.cloudformation.Context block found.; VPCDHCPOptionsAssociation: No Metadata.com.aws.cloudformation.Context block found.; VPCGatewayAttachment: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "DHCPOptions", + "entityType": "Resource", + "resourceType": "AWS::EC2::DHCPOptions" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 481, + "startColumn": 9, + "endLine": 481, + "endColumn": 21, + "relatedResources": [ + { + "resource": { + "id": "InternetGateway", + "resourceType": "AWS::EC2::InternetGateway" + }, + "location": { + "startLine": 538, + "startColumn": 9, + "endLine": 538, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NAT1EIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1745, + "startColumn": 9, + "endLine": 1745, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NAT2EIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1764, + "startColumn": 9, + "endLine": 1764, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NAT3EIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1783, + "startColumn": 9, + "endLine": 1783, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NAT4EIP", + "resourceType": "AWS::EC2::EIP" + }, + "location": { + "startLine": 1802, + "startColumn": 9, + "endLine": 1802, + "endColumn": 17 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATGateway1", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1821, + "startColumn": 9, + "endLine": 1821, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATGateway2", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1837, + "startColumn": 9, + "endLine": 1837, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATGateway3", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1853, + "startColumn": 9, + "endLine": 1853, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATGateway4", + "resourceType": "AWS::EC2::NatGateway" + }, + "location": { + "startLine": 1869, + "startColumn": 9, + "endLine": 1869, + "endColumn": 21 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATInstance1", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1885, + "startColumn": 9, + "endLine": 1885, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATInstance2", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1937, + "startColumn": 9, + "endLine": 1937, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATInstance3", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 1989, + "startColumn": 9, + "endLine": 1989, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATInstance4", + "resourceType": "AWS::EC2::Instance" + }, + "location": { + "startLine": 2041, + "startColumn": 9, + "endLine": 2041, + "endColumn": 22 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "NATInstanceSecurityGroup", + "resourceType": "AWS::EC2::SecurityGroup" + }, + "location": { + "startLine": 2093, + "startColumn": 9, + "endLine": 2093, + "endColumn": 34 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 566, + "startColumn": 9, + "endLine": 566, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1ARoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 947, + "startColumn": 9, + "endLine": 947, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1ARouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 928, + "startColumn": 9, + "endLine": 928, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1ARouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 979, + "startColumn": 9, + "endLine": 979, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1B", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 596, + "startColumn": 9, + "endLine": 596, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BNetworkAcl", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 1243, + "startColumn": 9, + "endLine": 1243, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BNetworkAclAssociation", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 1290, + "startColumn": 9, + "endLine": 1290, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BNetworkAclEntryInbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1262, + "startColumn": 9, + "endLine": 1262, + "endColumn": 47 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BNetworkAclEntryOutbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1276, + "startColumn": 9, + "endLine": 1276, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BRoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1199, + "startColumn": 9, + "endLine": 1199, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BRouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1180, + "startColumn": 9, + "endLine": 1180, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet1BRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1231, + "startColumn": 9, + "endLine": 1231, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 626, + "startColumn": 9, + "endLine": 626, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2ARoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1010, + "startColumn": 9, + "endLine": 1010, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2ARouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 991, + "startColumn": 9, + "endLine": 991, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2ARouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1042, + "startColumn": 9, + "endLine": 1042, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2B", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 656, + "startColumn": 9, + "endLine": 656, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BNetworkAcl", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 1365, + "startColumn": 9, + "endLine": 1365, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BNetworkAclAssociation", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 1412, + "startColumn": 9, + "endLine": 1412, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BNetworkAclEntryInbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1384, + "startColumn": 9, + "endLine": 1384, + "endColumn": 47 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BNetworkAclEntryOutbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1398, + "startColumn": 9, + "endLine": 1398, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BRoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1321, + "startColumn": 9, + "endLine": 1321, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BRouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1302, + "startColumn": 9, + "endLine": 1302, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet2BRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1353, + "startColumn": 9, + "endLine": 1353, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 686, + "startColumn": 9, + "endLine": 686, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3ARoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1073, + "startColumn": 9, + "endLine": 1073, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3ARouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1054, + "startColumn": 9, + "endLine": 1054, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3ARouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1105, + "startColumn": 9, + "endLine": 1105, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3B", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 716, + "startColumn": 9, + "endLine": 716, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BNetworkAcl", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 1487, + "startColumn": 9, + "endLine": 1487, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BNetworkAclAssociation", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 1534, + "startColumn": 9, + "endLine": 1534, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BNetworkAclEntryInbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1506, + "startColumn": 9, + "endLine": 1506, + "endColumn": 47 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BNetworkAclEntryOutbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1520, + "startColumn": 9, + "endLine": 1520, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BRoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1443, + "startColumn": 9, + "endLine": 1443, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BRouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1424, + "startColumn": 9, + "endLine": 1424, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet3BRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1475, + "startColumn": 9, + "endLine": 1475, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4A", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 746, + "startColumn": 9, + "endLine": 746, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4ARoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1136, + "startColumn": 9, + "endLine": 1136, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4ARouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1117, + "startColumn": 9, + "endLine": 1117, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4ARouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1168, + "startColumn": 9, + "endLine": 1168, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4B", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 776, + "startColumn": 9, + "endLine": 776, + "endColumn": 25 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BNetworkAcl", + "resourceType": "AWS::EC2::NetworkAcl" + }, + "location": { + "startLine": 1609, + "startColumn": 9, + "endLine": 1609, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BNetworkAclAssociation", + "resourceType": "AWS::EC2::SubnetNetworkAclAssociation" + }, + "location": { + "startLine": 1656, + "startColumn": 9, + "endLine": 1656, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BNetworkAclEntryInbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1628, + "startColumn": 9, + "endLine": 1628, + "endColumn": 47 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BNetworkAclEntryOutbound", + "resourceType": "AWS::EC2::NetworkAclEntry" + }, + "location": { + "startLine": 1642, + "startColumn": 9, + "endLine": 1642, + "endColumn": 48 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BRoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1565, + "startColumn": 9, + "endLine": 1565, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BRouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1546, + "startColumn": 9, + "endLine": 1546, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PrivateSubnet4BRouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1597, + "startColumn": 9, + "endLine": 1597, + "endColumn": 46 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet1", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 806, + "startColumn": 9, + "endLine": 806, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet1RouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1699, + "startColumn": 9, + "endLine": 1699, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet2", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 836, + "startColumn": 9, + "endLine": 836, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet2RouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1710, + "startColumn": 9, + "endLine": 1710, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet3", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 866, + "startColumn": 9, + "endLine": 866, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet3RouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1721, + "startColumn": 9, + "endLine": 1721, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet4", + "resourceType": "AWS::EC2::Subnet" + }, + "location": { + "startLine": 897, + "startColumn": 9, + "endLine": 897, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnet4RouteTableAssociation", + "resourceType": "AWS::EC2::SubnetRouteTableAssociation" + }, + "location": { + "startLine": 1733, + "startColumn": 9, + "endLine": 1733, + "endColumn": 44 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnetRoute", + "resourceType": "AWS::EC2::Route" + }, + "location": { + "startLine": 1686, + "startColumn": 9, + "endLine": 1686, + "endColumn": 27 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "PublicSubnetRouteTable", + "resourceType": "AWS::EC2::RouteTable" + }, + "location": { + "startLine": 1668, + "startColumn": 9, + "endLine": 1668, + "endColumn": 32 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "S3VPCEndpoint", + "resourceType": "AWS::EC2::VPCEndpoint" + }, + "location": { + "startLine": 2113, + "startColumn": 9, + "endLine": 2113, + "endColumn": 23 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPC", + "resourceType": "AWS::EC2::VPC" + }, + "location": { + "startLine": 506, + "startColumn": 9, + "endLine": 506, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCDHCPOptionsAssociation", + "resourceType": "AWS::EC2::VPCDHCPOptionsAssociation" + }, + "location": { + "startLine": 527, + "startColumn": 9, + "endLine": 527, + "endColumn": 35 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "VPCGatewayAttachment", + "resourceType": "AWS::EC2::VPCGatewayAttachment" + }, + "location": { + "startLine": 555, + "startColumn": 9, + "endLine": 555, + "endColumn": 30 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I1022", "severity": "INFO", @@ -260029,7 +329701,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 81, + "warnings": 83, "informational": 40, "debug": 0 }, @@ -261471,6 +331143,294 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 863, + "startColumn": 1, + "endLine": 863, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (20 resource(s)): CombinedTopic00: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic01: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic02: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic03: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic04: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic05: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic06: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic07: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic08: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic09: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic10: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic11: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic12: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic13: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic14: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic15: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic16: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic17: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic18: No Metadata.com.aws.cloudformation.Context block found.; CombinedTopic19: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "CombinedTopic00", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 864, + "startColumn": 3, + "endLine": 864, + "endColumn": 18, + "relatedResources": [ + { + "resource": { + "id": "CombinedTopic01", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 870, + "startColumn": 3, + "endLine": 870, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic02", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 876, + "startColumn": 3, + "endLine": 876, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic03", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 882, + "startColumn": 3, + "endLine": 882, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic04", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 888, + "startColumn": 3, + "endLine": 888, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic05", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic06", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 900, + "startColumn": 3, + "endLine": 900, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic07", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 906, + "startColumn": 3, + "endLine": 906, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic08", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 912, + "startColumn": 3, + "endLine": 912, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic09", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 918, + "startColumn": 3, + "endLine": 918, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic10", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 924, + "startColumn": 3, + "endLine": 924, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic11", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 930, + "startColumn": 3, + "endLine": 930, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic12", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 936, + "startColumn": 3, + "endLine": 936, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic13", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 942, + "startColumn": 3, + "endLine": 942, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic14", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 948, + "startColumn": 3, + "endLine": 948, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic15", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic16", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 960, + "startColumn": 3, + "endLine": 960, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic17", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 966, + "startColumn": 3, + "endLine": 966, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic18", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 972, + "startColumn": 3, + "endLine": 972, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "CombinedTopic19", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 978, + "startColumn": 3, + "endLine": 978, + "endColumn": 18 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -262362,7 +332322,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 10, + "warnings": 12, "informational": 20, "debug": 0 }, @@ -262561,6 +332521,164 @@ "ruleDescription": "Check Fn::If has a path that cannot be reached", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 361, + "startColumn": 1, + "endLine": 361, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): GatedTopic00: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic01: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic02: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic03: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic04: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic05: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic06: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic07: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic08: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic09: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GatedTopic00", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 362, + "startColumn": 3, + "endLine": 362, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "GatedTopic01", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 368, + "startColumn": 3, + "endLine": 368, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic02", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 374, + "startColumn": 3, + "endLine": 374, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic03", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 380, + "startColumn": 3, + "endLine": 380, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic04", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic05", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 392, + "startColumn": 3, + "endLine": 392, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic06", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 398, + "startColumn": 3, + "endLine": 398, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic07", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 404, + "startColumn": 3, + "endLine": 404, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic08", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic09", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 416, + "startColumn": 3, + "endLine": 416, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -263012,7 +333130,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 33, + "warnings": 35, "informational": 20, "debug": 0 }, @@ -263615,6 +333733,164 @@ "ruleDescription": "Check if Parameters are Used", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 573, + "startColumn": 1, + "endLine": 573, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (10 resource(s)): GatedTopic00: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic01: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic02: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic03: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic04: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic05: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic06: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic07: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic08: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic09: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GatedTopic00", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 574, + "startColumn": 3, + "endLine": 574, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "GatedTopic01", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 580, + "startColumn": 3, + "endLine": 580, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic02", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 586, + "startColumn": 3, + "endLine": 586, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic03", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 592, + "startColumn": 3, + "endLine": 592, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic04", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 598, + "startColumn": 3, + "endLine": 598, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic05", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 604, + "startColumn": 3, + "endLine": 604, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic06", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 610, + "startColumn": 3, + "endLine": 610, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic07", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 616, + "startColumn": 3, + "endLine": 616, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic08", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 622, + "startColumn": 3, + "endLine": 622, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic09", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 628, + "startColumn": 3, + "endLine": 628, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -264066,7 +334342,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 136, + "warnings": 138, "informational": 20, "debug": 0 }, @@ -266323,6 +336599,294 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 211, + "startColumn": 1, + "endLine": 211, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (20 resource(s)): GatedTopic00: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic01: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic02: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic03: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic04: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic05: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic06: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic07: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic08: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic09: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic10: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic11: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic12: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic13: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic14: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic15: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic16: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic17: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic18: No Metadata.com.aws.cloudformation.Context block found.; GatedTopic19: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GatedTopic00", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 212, + "startColumn": 3, + "endLine": 212, + "endColumn": 15, + "relatedResources": [ + { + "resource": { + "id": "GatedTopic01", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 217, + "startColumn": 3, + "endLine": 217, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic02", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 222, + "startColumn": 3, + "endLine": 222, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic03", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 227, + "startColumn": 3, + "endLine": 227, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic04", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 232, + "startColumn": 3, + "endLine": 232, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic05", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 237, + "startColumn": 3, + "endLine": 237, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic06", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 242, + "startColumn": 3, + "endLine": 242, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic07", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 247, + "startColumn": 3, + "endLine": 247, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic08", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 252, + "startColumn": 3, + "endLine": 252, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic09", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 257, + "startColumn": 3, + "endLine": 257, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic10", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 262, + "startColumn": 3, + "endLine": 262, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic11", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 267, + "startColumn": 3, + "endLine": 267, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic12", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 272, + "startColumn": 3, + "endLine": 272, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic13", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 277, + "startColumn": 3, + "endLine": 277, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic14", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 282, + "startColumn": 3, + "endLine": 282, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic15", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 287, + "startColumn": 3, + "endLine": 287, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic16", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 292, + "startColumn": 3, + "endLine": 292, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic17", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 297, + "startColumn": 3, + "endLine": 297, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic18", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "GatedTopic19", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 307, + "startColumn": 3, + "endLine": 307, + "endColumn": 15 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -266734,7 +337298,7 @@ "counts": { "fatal": 0, "errors": 500, - "warnings": 0, + "warnings": 2, "informational": 1000, "debug": 0 }, @@ -276243,6 +346807,6534 @@ "ruleDescription": "Validate that all resources have unique primary identifiers", "phase": "LINT" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (500 resource(s)): Domain0000: No Metadata.com.aws.cloudformation.Context block found.; Domain0001: No Metadata.com.aws.cloudformation.Context block found.; Domain0002: No Metadata.com.aws.cloudformation.Context block found.; Domain0003: No Metadata.com.aws.cloudformation.Context block found.; Domain0004: No Metadata.com.aws.cloudformation.Context block found.; Domain0005: No Metadata.com.aws.cloudformation.Context block found.; Domain0006: No Metadata.com.aws.cloudformation.Context block found.; Domain0007: No Metadata.com.aws.cloudformation.Context block found.; Domain0008: No Metadata.com.aws.cloudformation.Context block found.; Domain0009: No Metadata.com.aws.cloudformation.Context block found.; Domain0010: No Metadata.com.aws.cloudformation.Context block found.; Domain0011: No Metadata.com.aws.cloudformation.Context block found.; Domain0012: No Metadata.com.aws.cloudformation.Context block found.; Domain0013: No Metadata.com.aws.cloudformation.Context block found.; Domain0014: No Metadata.com.aws.cloudformation.Context block found.; Domain0015: No Metadata.com.aws.cloudformation.Context block found.; Domain0016: No Metadata.com.aws.cloudformation.Context block found.; Domain0017: No Metadata.com.aws.cloudformation.Context block found.; Domain0018: No Metadata.com.aws.cloudformation.Context block found.; Domain0019: No Metadata.com.aws.cloudformation.Context block found.; Domain0020: No Metadata.com.aws.cloudformation.Context block found.; Domain0021: No Metadata.com.aws.cloudformation.Context block found.; Domain0022: No Metadata.com.aws.cloudformation.Context block found.; Domain0023: No Metadata.com.aws.cloudformation.Context block found.; Domain0024: No Metadata.com.aws.cloudformation.Context block found.; Domain0025: No Metadata.com.aws.cloudformation.Context block found.; Domain0026: No Metadata.com.aws.cloudformation.Context block found.; Domain0027: No Metadata.com.aws.cloudformation.Context block found.; Domain0028: No Metadata.com.aws.cloudformation.Context block found.; Domain0029: No Metadata.com.aws.cloudformation.Context block found.; Domain0030: No Metadata.com.aws.cloudformation.Context block found.; Domain0031: No Metadata.com.aws.cloudformation.Context block found.; Domain0032: No Metadata.com.aws.cloudformation.Context block found.; Domain0033: No Metadata.com.aws.cloudformation.Context block found.; Domain0034: No Metadata.com.aws.cloudformation.Context block found.; Domain0035: No Metadata.com.aws.cloudformation.Context block found.; Domain0036: No Metadata.com.aws.cloudformation.Context block found.; Domain0037: No Metadata.com.aws.cloudformation.Context block found.; Domain0038: No Metadata.com.aws.cloudformation.Context block found.; Domain0039: No Metadata.com.aws.cloudformation.Context block found.; Domain0040: No Metadata.com.aws.cloudformation.Context block found.; Domain0041: No Metadata.com.aws.cloudformation.Context block found.; Domain0042: No Metadata.com.aws.cloudformation.Context block found.; Domain0043: No Metadata.com.aws.cloudformation.Context block found.; Domain0044: No Metadata.com.aws.cloudformation.Context block found.; Domain0045: No Metadata.com.aws.cloudformation.Context block found.; Domain0046: No Metadata.com.aws.cloudformation.Context block found.; Domain0047: No Metadata.com.aws.cloudformation.Context block found.; Domain0048: No Metadata.com.aws.cloudformation.Context block found.; Domain0049: No Metadata.com.aws.cloudformation.Context block found.; Domain0050: No Metadata.com.aws.cloudformation.Context block found.; Domain0051: No Metadata.com.aws.cloudformation.Context block found.; Domain0052: No Metadata.com.aws.cloudformation.Context block found.; Domain0053: No Metadata.com.aws.cloudformation.Context block found.; Domain0054: No Metadata.com.aws.cloudformation.Context block found.; Domain0055: No Metadata.com.aws.cloudformation.Context block found.; Domain0056: No Metadata.com.aws.cloudformation.Context block found.; Domain0057: No Metadata.com.aws.cloudformation.Context block found.; Domain0058: No Metadata.com.aws.cloudformation.Context block found.; Domain0059: No Metadata.com.aws.cloudformation.Context block found.; Domain0060: No Metadata.com.aws.cloudformation.Context block found.; Domain0061: No Metadata.com.aws.cloudformation.Context block found.; Domain0062: No Metadata.com.aws.cloudformation.Context block found.; Domain0063: No Metadata.com.aws.cloudformation.Context block found.; Domain0064: No Metadata.com.aws.cloudformation.Context block found.; Domain0065: No Metadata.com.aws.cloudformation.Context block found.; Domain0066: No Metadata.com.aws.cloudformation.Context block found.; Domain0067: No Metadata.com.aws.cloudformation.Context block found.; Domain0068: No Metadata.com.aws.cloudformation.Context block found.; Domain0069: No Metadata.com.aws.cloudformation.Context block found.; Domain0070: No Metadata.com.aws.cloudformation.Context block found.; Domain0071: No Metadata.com.aws.cloudformation.Context block found.; Domain0072: No Metadata.com.aws.cloudformation.Context block found.; Domain0073: No Metadata.com.aws.cloudformation.Context block found.; Domain0074: No Metadata.com.aws.cloudformation.Context block found.; Domain0075: No Metadata.com.aws.cloudformation.Context block found.; Domain0076: No Metadata.com.aws.cloudformation.Context block found.; Domain0077: No Metadata.com.aws.cloudformation.Context block found.; Domain0078: No Metadata.com.aws.cloudformation.Context block found.; Domain0079: No Metadata.com.aws.cloudformation.Context block found.; Domain0080: No Metadata.com.aws.cloudformation.Context block found.; Domain0081: No Metadata.com.aws.cloudformation.Context block found.; Domain0082: No Metadata.com.aws.cloudformation.Context block found.; Domain0083: No Metadata.com.aws.cloudformation.Context block found.; Domain0084: No Metadata.com.aws.cloudformation.Context block found.; Domain0085: No Metadata.com.aws.cloudformation.Context block found.; Domain0086: No Metadata.com.aws.cloudformation.Context block found.; Domain0087: No Metadata.com.aws.cloudformation.Context block found.; Domain0088: No Metadata.com.aws.cloudformation.Context block found.; Domain0089: No Metadata.com.aws.cloudformation.Context block found.; Domain0090: No Metadata.com.aws.cloudformation.Context block found.; Domain0091: No Metadata.com.aws.cloudformation.Context block found.; Domain0092: No Metadata.com.aws.cloudformation.Context block found.; Domain0093: No Metadata.com.aws.cloudformation.Context block found.; Domain0094: No Metadata.com.aws.cloudformation.Context block found.; Domain0095: No Metadata.com.aws.cloudformation.Context block found.; Domain0096: No Metadata.com.aws.cloudformation.Context block found.; Domain0097: No Metadata.com.aws.cloudformation.Context block found.; Domain0098: No Metadata.com.aws.cloudformation.Context block found.; Domain0099: No Metadata.com.aws.cloudformation.Context block found.; Domain0100: No Metadata.com.aws.cloudformation.Context block found.; Domain0101: No Metadata.com.aws.cloudformation.Context block found.; Domain0102: No Metadata.com.aws.cloudformation.Context block found.; Domain0103: No Metadata.com.aws.cloudformation.Context block found.; Domain0104: No Metadata.com.aws.cloudformation.Context block found.; Domain0105: No Metadata.com.aws.cloudformation.Context block found.; Domain0106: No Metadata.com.aws.cloudformation.Context block found.; Domain0107: No Metadata.com.aws.cloudformation.Context block found.; Domain0108: No Metadata.com.aws.cloudformation.Context block found.; Domain0109: No Metadata.com.aws.cloudformation.Context block found.; Domain0110: No Metadata.com.aws.cloudformation.Context block found.; Domain0111: No Metadata.com.aws.cloudformation.Context block found.; Domain0112: No Metadata.com.aws.cloudformation.Context block found.; Domain0113: No Metadata.com.aws.cloudformation.Context block found.; Domain0114: No Metadata.com.aws.cloudformation.Context block found.; Domain0115: No Metadata.com.aws.cloudformation.Context block found.; Domain0116: No Metadata.com.aws.cloudformation.Context block found.; Domain0117: No Metadata.com.aws.cloudformation.Context block found.; Domain0118: No Metadata.com.aws.cloudformation.Context block found.; Domain0119: No Metadata.com.aws.cloudformation.Context block found.; Domain0120: No Metadata.com.aws.cloudformation.Context block found.; Domain0121: No Metadata.com.aws.cloudformation.Context block found.; Domain0122: No Metadata.com.aws.cloudformation.Context block found.; Domain0123: No Metadata.com.aws.cloudformation.Context block found.; Domain0124: No Metadata.com.aws.cloudformation.Context block found.; Domain0125: No Metadata.com.aws.cloudformation.Context block found.; Domain0126: No Metadata.com.aws.cloudformation.Context block found.; Domain0127: No Metadata.com.aws.cloudformation.Context block found.; Domain0128: No Metadata.com.aws.cloudformation.Context block found.; Domain0129: No Metadata.com.aws.cloudformation.Context block found.; Domain0130: No Metadata.com.aws.cloudformation.Context block found.; Domain0131: No Metadata.com.aws.cloudformation.Context block found.; Domain0132: No Metadata.com.aws.cloudformation.Context block found.; Domain0133: No Metadata.com.aws.cloudformation.Context block found.; Domain0134: No Metadata.com.aws.cloudformation.Context block found.; Domain0135: No Metadata.com.aws.cloudformation.Context block found.; Domain0136: No Metadata.com.aws.cloudformation.Context block found.; Domain0137: No Metadata.com.aws.cloudformation.Context block found.; Domain0138: No Metadata.com.aws.cloudformation.Context block found.; Domain0139: No Metadata.com.aws.cloudformation.Context block found.; Domain0140: No Metadata.com.aws.cloudformation.Context block found.; Domain0141: No Metadata.com.aws.cloudformation.Context block found.; Domain0142: No Metadata.com.aws.cloudformation.Context block found.; Domain0143: No Metadata.com.aws.cloudformation.Context block found.; Domain0144: No Metadata.com.aws.cloudformation.Context block found.; Domain0145: No Metadata.com.aws.cloudformation.Context block found.; Domain0146: No Metadata.com.aws.cloudformation.Context block found.; Domain0147: No Metadata.com.aws.cloudformation.Context block found.; Domain0148: No Metadata.com.aws.cloudformation.Context block found.; Domain0149: No Metadata.com.aws.cloudformation.Context block found.; Domain0150: No Metadata.com.aws.cloudformation.Context block found.; Domain0151: No Metadata.com.aws.cloudformation.Context block found.; Domain0152: No Metadata.com.aws.cloudformation.Context block found.; Domain0153: No Metadata.com.aws.cloudformation.Context block found.; Domain0154: No Metadata.com.aws.cloudformation.Context block found.; Domain0155: No Metadata.com.aws.cloudformation.Context block found.; Domain0156: No Metadata.com.aws.cloudformation.Context block found.; Domain0157: No Metadata.com.aws.cloudformation.Context block found.; Domain0158: No Metadata.com.aws.cloudformation.Context block found.; Domain0159: No Metadata.com.aws.cloudformation.Context block found.; Domain0160: No Metadata.com.aws.cloudformation.Context block found.; Domain0161: No Metadata.com.aws.cloudformation.Context block found.; Domain0162: No Metadata.com.aws.cloudformation.Context block found.; Domain0163: No Metadata.com.aws.cloudformation.Context block found.; Domain0164: No Metadata.com.aws.cloudformation.Context block found.; Domain0165: No Metadata.com.aws.cloudformation.Context block found.; Domain0166: No Metadata.com.aws.cloudformation.Context block found.; Domain0167: No Metadata.com.aws.cloudformation.Context block found.; Domain0168: No Metadata.com.aws.cloudformation.Context block found.; Domain0169: No Metadata.com.aws.cloudformation.Context block found.; Domain0170: No Metadata.com.aws.cloudformation.Context block found.; Domain0171: No Metadata.com.aws.cloudformation.Context block found.; Domain0172: No Metadata.com.aws.cloudformation.Context block found.; Domain0173: No Metadata.com.aws.cloudformation.Context block found.; Domain0174: No Metadata.com.aws.cloudformation.Context block found.; Domain0175: No Metadata.com.aws.cloudformation.Context block found.; Domain0176: No Metadata.com.aws.cloudformation.Context block found.; Domain0177: No Metadata.com.aws.cloudformation.Context block found.; Domain0178: No Metadata.com.aws.cloudformation.Context block found.; Domain0179: No Metadata.com.aws.cloudformation.Context block found.; Domain0180: No Metadata.com.aws.cloudformation.Context block found.; Domain0181: No Metadata.com.aws.cloudformation.Context block found.; Domain0182: No Metadata.com.aws.cloudformation.Context block found.; Domain0183: No Metadata.com.aws.cloudformation.Context block found.; Domain0184: No Metadata.com.aws.cloudformation.Context block found.; Domain0185: No Metadata.com.aws.cloudformation.Context block found.; Domain0186: No Metadata.com.aws.cloudformation.Context block found.; Domain0187: No Metadata.com.aws.cloudformation.Context block found.; Domain0188: No Metadata.com.aws.cloudformation.Context block found.; Domain0189: No Metadata.com.aws.cloudformation.Context block found.; Domain0190: No Metadata.com.aws.cloudformation.Context block found.; Domain0191: No Metadata.com.aws.cloudformation.Context block found.; Domain0192: No Metadata.com.aws.cloudformation.Context block found.; Domain0193: No Metadata.com.aws.cloudformation.Context block found.; Domain0194: No Metadata.com.aws.cloudformation.Context block found.; Domain0195: No Metadata.com.aws.cloudformation.Context block found.; Domain0196: No Metadata.com.aws.cloudformation.Context block found.; Domain0197: No Metadata.com.aws.cloudformation.Context block found.; Domain0198: No Metadata.com.aws.cloudformation.Context block found.; Domain0199: No Metadata.com.aws.cloudformation.Context block found.; Domain0200: No Metadata.com.aws.cloudformation.Context block found.; Domain0201: No Metadata.com.aws.cloudformation.Context block found.; Domain0202: No Metadata.com.aws.cloudformation.Context block found.; Domain0203: No Metadata.com.aws.cloudformation.Context block found.; Domain0204: No Metadata.com.aws.cloudformation.Context block found.; Domain0205: No Metadata.com.aws.cloudformation.Context block found.; Domain0206: No Metadata.com.aws.cloudformation.Context block found.; Domain0207: No Metadata.com.aws.cloudformation.Context block found.; Domain0208: No Metadata.com.aws.cloudformation.Context block found.; Domain0209: No Metadata.com.aws.cloudformation.Context block found.; Domain0210: No Metadata.com.aws.cloudformation.Context block found.; Domain0211: No Metadata.com.aws.cloudformation.Context block found.; Domain0212: No Metadata.com.aws.cloudformation.Context block found.; Domain0213: No Metadata.com.aws.cloudformation.Context block found.; Domain0214: No Metadata.com.aws.cloudformation.Context block found.; Domain0215: No Metadata.com.aws.cloudformation.Context block found.; Domain0216: No Metadata.com.aws.cloudformation.Context block found.; Domain0217: No Metadata.com.aws.cloudformation.Context block found.; Domain0218: No Metadata.com.aws.cloudformation.Context block found.; Domain0219: No Metadata.com.aws.cloudformation.Context block found.; Domain0220: No Metadata.com.aws.cloudformation.Context block found.; Domain0221: No Metadata.com.aws.cloudformation.Context block found.; Domain0222: No Metadata.com.aws.cloudformation.Context block found.; Domain0223: No Metadata.com.aws.cloudformation.Context block found.; Domain0224: No Metadata.com.aws.cloudformation.Context block found.; Domain0225: No Metadata.com.aws.cloudformation.Context block found.; Domain0226: No Metadata.com.aws.cloudformation.Context block found.; Domain0227: No Metadata.com.aws.cloudformation.Context block found.; Domain0228: No Metadata.com.aws.cloudformation.Context block found.; Domain0229: No Metadata.com.aws.cloudformation.Context block found.; Domain0230: No Metadata.com.aws.cloudformation.Context block found.; Domain0231: No Metadata.com.aws.cloudformation.Context block found.; Domain0232: No Metadata.com.aws.cloudformation.Context block found.; Domain0233: No Metadata.com.aws.cloudformation.Context block found.; Domain0234: No Metadata.com.aws.cloudformation.Context block found.; Domain0235: No Metadata.com.aws.cloudformation.Context block found.; Domain0236: No Metadata.com.aws.cloudformation.Context block found.; Domain0237: No Metadata.com.aws.cloudformation.Context block found.; Domain0238: No Metadata.com.aws.cloudformation.Context block found.; Domain0239: No Metadata.com.aws.cloudformation.Context block found.; Domain0240: No Metadata.com.aws.cloudformation.Context block found.; Domain0241: No Metadata.com.aws.cloudformation.Context block found.; Domain0242: No Metadata.com.aws.cloudformation.Context block found.; Domain0243: No Metadata.com.aws.cloudformation.Context block found.; Domain0244: No Metadata.com.aws.cloudformation.Context block found.; Domain0245: No Metadata.com.aws.cloudformation.Context block found.; Domain0246: No Metadata.com.aws.cloudformation.Context block found.; Domain0247: No Metadata.com.aws.cloudformation.Context block found.; Domain0248: No Metadata.com.aws.cloudformation.Context block found.; Domain0249: No Metadata.com.aws.cloudformation.Context block found.; Domain0250: No Metadata.com.aws.cloudformation.Context block found.; Domain0251: No Metadata.com.aws.cloudformation.Context block found.; Domain0252: No Metadata.com.aws.cloudformation.Context block found.; Domain0253: No Metadata.com.aws.cloudformation.Context block found.; Domain0254: No Metadata.com.aws.cloudformation.Context block found.; Domain0255: No Metadata.com.aws.cloudformation.Context block found.; Domain0256: No Metadata.com.aws.cloudformation.Context block found.; Domain0257: No Metadata.com.aws.cloudformation.Context block found.; Domain0258: No Metadata.com.aws.cloudformation.Context block found.; Domain0259: No Metadata.com.aws.cloudformation.Context block found.; Domain0260: No Metadata.com.aws.cloudformation.Context block found.; Domain0261: No Metadata.com.aws.cloudformation.Context block found.; Domain0262: No Metadata.com.aws.cloudformation.Context block found.; Domain0263: No Metadata.com.aws.cloudformation.Context block found.; Domain0264: No Metadata.com.aws.cloudformation.Context block found.; Domain0265: No Metadata.com.aws.cloudformation.Context block found.; Domain0266: No Metadata.com.aws.cloudformation.Context block found.; Domain0267: No Metadata.com.aws.cloudformation.Context block found.; Domain0268: No Metadata.com.aws.cloudformation.Context block found.; Domain0269: No Metadata.com.aws.cloudformation.Context block found.; Domain0270: No Metadata.com.aws.cloudformation.Context block found.; Domain0271: No Metadata.com.aws.cloudformation.Context block found.; Domain0272: No Metadata.com.aws.cloudformation.Context block found.; Domain0273: No Metadata.com.aws.cloudformation.Context block found.; Domain0274: No Metadata.com.aws.cloudformation.Context block found.; Domain0275: No Metadata.com.aws.cloudformation.Context block found.; Domain0276: No Metadata.com.aws.cloudformation.Context block found.; Domain0277: No Metadata.com.aws.cloudformation.Context block found.; Domain0278: No Metadata.com.aws.cloudformation.Context block found.; Domain0279: No Metadata.com.aws.cloudformation.Context block found.; Domain0280: No Metadata.com.aws.cloudformation.Context block found.; Domain0281: No Metadata.com.aws.cloudformation.Context block found.; Domain0282: No Metadata.com.aws.cloudformation.Context block found.; Domain0283: No Metadata.com.aws.cloudformation.Context block found.; Domain0284: No Metadata.com.aws.cloudformation.Context block found.; Domain0285: No Metadata.com.aws.cloudformation.Context block found.; Domain0286: No Metadata.com.aws.cloudformation.Context block found.; Domain0287: No Metadata.com.aws.cloudformation.Context block found.; Domain0288: No Metadata.com.aws.cloudformation.Context block found.; Domain0289: No Metadata.com.aws.cloudformation.Context block found.; Domain0290: No Metadata.com.aws.cloudformation.Context block found.; Domain0291: No Metadata.com.aws.cloudformation.Context block found.; Domain0292: No Metadata.com.aws.cloudformation.Context block found.; Domain0293: No Metadata.com.aws.cloudformation.Context block found.; Domain0294: No Metadata.com.aws.cloudformation.Context block found.; Domain0295: No Metadata.com.aws.cloudformation.Context block found.; Domain0296: No Metadata.com.aws.cloudformation.Context block found.; Domain0297: No Metadata.com.aws.cloudformation.Context block found.; Domain0298: No Metadata.com.aws.cloudformation.Context block found.; Domain0299: No Metadata.com.aws.cloudformation.Context block found.; Domain0300: No Metadata.com.aws.cloudformation.Context block found.; Domain0301: No Metadata.com.aws.cloudformation.Context block found.; Domain0302: No Metadata.com.aws.cloudformation.Context block found.; Domain0303: No Metadata.com.aws.cloudformation.Context block found.; Domain0304: No Metadata.com.aws.cloudformation.Context block found.; Domain0305: No Metadata.com.aws.cloudformation.Context block found.; Domain0306: No Metadata.com.aws.cloudformation.Context block found.; Domain0307: No Metadata.com.aws.cloudformation.Context block found.; Domain0308: No Metadata.com.aws.cloudformation.Context block found.; Domain0309: No Metadata.com.aws.cloudformation.Context block found.; Domain0310: No Metadata.com.aws.cloudformation.Context block found.; Domain0311: No Metadata.com.aws.cloudformation.Context block found.; Domain0312: No Metadata.com.aws.cloudformation.Context block found.; Domain0313: No Metadata.com.aws.cloudformation.Context block found.; Domain0314: No Metadata.com.aws.cloudformation.Context block found.; Domain0315: No Metadata.com.aws.cloudformation.Context block found.; Domain0316: No Metadata.com.aws.cloudformation.Context block found.; Domain0317: No Metadata.com.aws.cloudformation.Context block found.; Domain0318: No Metadata.com.aws.cloudformation.Context block found.; Domain0319: No Metadata.com.aws.cloudformation.Context block found.; Domain0320: No Metadata.com.aws.cloudformation.Context block found.; Domain0321: No Metadata.com.aws.cloudformation.Context block found.; Domain0322: No Metadata.com.aws.cloudformation.Context block found.; Domain0323: No Metadata.com.aws.cloudformation.Context block found.; Domain0324: No Metadata.com.aws.cloudformation.Context block found.; Domain0325: No Metadata.com.aws.cloudformation.Context block found.; Domain0326: No Metadata.com.aws.cloudformation.Context block found.; Domain0327: No Metadata.com.aws.cloudformation.Context block found.; Domain0328: No Metadata.com.aws.cloudformation.Context block found.; Domain0329: No Metadata.com.aws.cloudformation.Context block found.; Domain0330: No Metadata.com.aws.cloudformation.Context block found.; Domain0331: No Metadata.com.aws.cloudformation.Context block found.; Domain0332: No Metadata.com.aws.cloudformation.Context block found.; Domain0333: No Metadata.com.aws.cloudformation.Context block found.; Domain0334: No Metadata.com.aws.cloudformation.Context block found.; Domain0335: No Metadata.com.aws.cloudformation.Context block found.; Domain0336: No Metadata.com.aws.cloudformation.Context block found.; Domain0337: No Metadata.com.aws.cloudformation.Context block found.; Domain0338: No Metadata.com.aws.cloudformation.Context block found.; Domain0339: No Metadata.com.aws.cloudformation.Context block found.; Domain0340: No Metadata.com.aws.cloudformation.Context block found.; Domain0341: No Metadata.com.aws.cloudformation.Context block found.; Domain0342: No Metadata.com.aws.cloudformation.Context block found.; Domain0343: No Metadata.com.aws.cloudformation.Context block found.; Domain0344: No Metadata.com.aws.cloudformation.Context block found.; Domain0345: No Metadata.com.aws.cloudformation.Context block found.; Domain0346: No Metadata.com.aws.cloudformation.Context block found.; Domain0347: No Metadata.com.aws.cloudformation.Context block found.; Domain0348: No Metadata.com.aws.cloudformation.Context block found.; Domain0349: No Metadata.com.aws.cloudformation.Context block found.; Domain0350: No Metadata.com.aws.cloudformation.Context block found.; Domain0351: No Metadata.com.aws.cloudformation.Context block found.; Domain0352: No Metadata.com.aws.cloudformation.Context block found.; Domain0353: No Metadata.com.aws.cloudformation.Context block found.; Domain0354: No Metadata.com.aws.cloudformation.Context block found.; Domain0355: No Metadata.com.aws.cloudformation.Context block found.; Domain0356: No Metadata.com.aws.cloudformation.Context block found.; Domain0357: No Metadata.com.aws.cloudformation.Context block found.; Domain0358: No Metadata.com.aws.cloudformation.Context block found.; Domain0359: No Metadata.com.aws.cloudformation.Context block found.; Domain0360: No Metadata.com.aws.cloudformation.Context block found.; Domain0361: No Metadata.com.aws.cloudformation.Context block found.; Domain0362: No Metadata.com.aws.cloudformation.Context block found.; Domain0363: No Metadata.com.aws.cloudformation.Context block found.; Domain0364: No Metadata.com.aws.cloudformation.Context block found.; Domain0365: No Metadata.com.aws.cloudformation.Context block found.; Domain0366: No Metadata.com.aws.cloudformation.Context block found.; Domain0367: No Metadata.com.aws.cloudformation.Context block found.; Domain0368: No Metadata.com.aws.cloudformation.Context block found.; Domain0369: No Metadata.com.aws.cloudformation.Context block found.; Domain0370: No Metadata.com.aws.cloudformation.Context block found.; Domain0371: No Metadata.com.aws.cloudformation.Context block found.; Domain0372: No Metadata.com.aws.cloudformation.Context block found.; Domain0373: No Metadata.com.aws.cloudformation.Context block found.; Domain0374: No Metadata.com.aws.cloudformation.Context block found.; Domain0375: No Metadata.com.aws.cloudformation.Context block found.; Domain0376: No Metadata.com.aws.cloudformation.Context block found.; Domain0377: No Metadata.com.aws.cloudformation.Context block found.; Domain0378: No Metadata.com.aws.cloudformation.Context block found.; Domain0379: No Metadata.com.aws.cloudformation.Context block found.; Domain0380: No Metadata.com.aws.cloudformation.Context block found.; Domain0381: No Metadata.com.aws.cloudformation.Context block found.; Domain0382: No Metadata.com.aws.cloudformation.Context block found.; Domain0383: No Metadata.com.aws.cloudformation.Context block found.; Domain0384: No Metadata.com.aws.cloudformation.Context block found.; Domain0385: No Metadata.com.aws.cloudformation.Context block found.; Domain0386: No Metadata.com.aws.cloudformation.Context block found.; Domain0387: No Metadata.com.aws.cloudformation.Context block found.; Domain0388: No Metadata.com.aws.cloudformation.Context block found.; Domain0389: No Metadata.com.aws.cloudformation.Context block found.; Domain0390: No Metadata.com.aws.cloudformation.Context block found.; Domain0391: No Metadata.com.aws.cloudformation.Context block found.; Domain0392: No Metadata.com.aws.cloudformation.Context block found.; Domain0393: No Metadata.com.aws.cloudformation.Context block found.; Domain0394: No Metadata.com.aws.cloudformation.Context block found.; Domain0395: No Metadata.com.aws.cloudformation.Context block found.; Domain0396: No Metadata.com.aws.cloudformation.Context block found.; Domain0397: No Metadata.com.aws.cloudformation.Context block found.; Domain0398: No Metadata.com.aws.cloudformation.Context block found.; Domain0399: No Metadata.com.aws.cloudformation.Context block found.; Domain0400: No Metadata.com.aws.cloudformation.Context block found.; Domain0401: No Metadata.com.aws.cloudformation.Context block found.; Domain0402: No Metadata.com.aws.cloudformation.Context block found.; Domain0403: No Metadata.com.aws.cloudformation.Context block found.; Domain0404: No Metadata.com.aws.cloudformation.Context block found.; Domain0405: No Metadata.com.aws.cloudformation.Context block found.; Domain0406: No Metadata.com.aws.cloudformation.Context block found.; Domain0407: No Metadata.com.aws.cloudformation.Context block found.; Domain0408: No Metadata.com.aws.cloudformation.Context block found.; Domain0409: No Metadata.com.aws.cloudformation.Context block found.; Domain0410: No Metadata.com.aws.cloudformation.Context block found.; Domain0411: No Metadata.com.aws.cloudformation.Context block found.; Domain0412: No Metadata.com.aws.cloudformation.Context block found.; Domain0413: No Metadata.com.aws.cloudformation.Context block found.; Domain0414: No Metadata.com.aws.cloudformation.Context block found.; Domain0415: No Metadata.com.aws.cloudformation.Context block found.; Domain0416: No Metadata.com.aws.cloudformation.Context block found.; Domain0417: No Metadata.com.aws.cloudformation.Context block found.; Domain0418: No Metadata.com.aws.cloudformation.Context block found.; Domain0419: No Metadata.com.aws.cloudformation.Context block found.; Domain0420: No Metadata.com.aws.cloudformation.Context block found.; Domain0421: No Metadata.com.aws.cloudformation.Context block found.; Domain0422: No Metadata.com.aws.cloudformation.Context block found.; Domain0423: No Metadata.com.aws.cloudformation.Context block found.; Domain0424: No Metadata.com.aws.cloudformation.Context block found.; Domain0425: No Metadata.com.aws.cloudformation.Context block found.; Domain0426: No Metadata.com.aws.cloudformation.Context block found.; Domain0427: No Metadata.com.aws.cloudformation.Context block found.; Domain0428: No Metadata.com.aws.cloudformation.Context block found.; Domain0429: No Metadata.com.aws.cloudformation.Context block found.; Domain0430: No Metadata.com.aws.cloudformation.Context block found.; Domain0431: No Metadata.com.aws.cloudformation.Context block found.; Domain0432: No Metadata.com.aws.cloudformation.Context block found.; Domain0433: No Metadata.com.aws.cloudformation.Context block found.; Domain0434: No Metadata.com.aws.cloudformation.Context block found.; Domain0435: No Metadata.com.aws.cloudformation.Context block found.; Domain0436: No Metadata.com.aws.cloudformation.Context block found.; Domain0437: No Metadata.com.aws.cloudformation.Context block found.; Domain0438: No Metadata.com.aws.cloudformation.Context block found.; Domain0439: No Metadata.com.aws.cloudformation.Context block found.; Domain0440: No Metadata.com.aws.cloudformation.Context block found.; Domain0441: No Metadata.com.aws.cloudformation.Context block found.; Domain0442: No Metadata.com.aws.cloudformation.Context block found.; Domain0443: No Metadata.com.aws.cloudformation.Context block found.; Domain0444: No Metadata.com.aws.cloudformation.Context block found.; Domain0445: No Metadata.com.aws.cloudformation.Context block found.; Domain0446: No Metadata.com.aws.cloudformation.Context block found.; Domain0447: No Metadata.com.aws.cloudformation.Context block found.; Domain0448: No Metadata.com.aws.cloudformation.Context block found.; Domain0449: No Metadata.com.aws.cloudformation.Context block found.; Domain0450: No Metadata.com.aws.cloudformation.Context block found.; Domain0451: No Metadata.com.aws.cloudformation.Context block found.; Domain0452: No Metadata.com.aws.cloudformation.Context block found.; Domain0453: No Metadata.com.aws.cloudformation.Context block found.; Domain0454: No Metadata.com.aws.cloudformation.Context block found.; Domain0455: No Metadata.com.aws.cloudformation.Context block found.; Domain0456: No Metadata.com.aws.cloudformation.Context block found.; Domain0457: No Metadata.com.aws.cloudformation.Context block found.; Domain0458: No Metadata.com.aws.cloudformation.Context block found.; Domain0459: No Metadata.com.aws.cloudformation.Context block found.; Domain0460: No Metadata.com.aws.cloudformation.Context block found.; Domain0461: No Metadata.com.aws.cloudformation.Context block found.; Domain0462: No Metadata.com.aws.cloudformation.Context block found.; Domain0463: No Metadata.com.aws.cloudformation.Context block found.; Domain0464: No Metadata.com.aws.cloudformation.Context block found.; Domain0465: No Metadata.com.aws.cloudformation.Context block found.; Domain0466: No Metadata.com.aws.cloudformation.Context block found.; Domain0467: No Metadata.com.aws.cloudformation.Context block found.; Domain0468: No Metadata.com.aws.cloudformation.Context block found.; Domain0469: No Metadata.com.aws.cloudformation.Context block found.; Domain0470: No Metadata.com.aws.cloudformation.Context block found.; Domain0471: No Metadata.com.aws.cloudformation.Context block found.; Domain0472: No Metadata.com.aws.cloudformation.Context block found.; Domain0473: No Metadata.com.aws.cloudformation.Context block found.; Domain0474: No Metadata.com.aws.cloudformation.Context block found.; Domain0475: No Metadata.com.aws.cloudformation.Context block found.; Domain0476: No Metadata.com.aws.cloudformation.Context block found.; Domain0477: No Metadata.com.aws.cloudformation.Context block found.; Domain0478: No Metadata.com.aws.cloudformation.Context block found.; Domain0479: No Metadata.com.aws.cloudformation.Context block found.; Domain0480: No Metadata.com.aws.cloudformation.Context block found.; Domain0481: No Metadata.com.aws.cloudformation.Context block found.; Domain0482: No Metadata.com.aws.cloudformation.Context block found.; Domain0483: No Metadata.com.aws.cloudformation.Context block found.; Domain0484: No Metadata.com.aws.cloudformation.Context block found.; Domain0485: No Metadata.com.aws.cloudformation.Context block found.; Domain0486: No Metadata.com.aws.cloudformation.Context block found.; Domain0487: No Metadata.com.aws.cloudformation.Context block found.; Domain0488: No Metadata.com.aws.cloudformation.Context block found.; Domain0489: No Metadata.com.aws.cloudformation.Context block found.; Domain0490: No Metadata.com.aws.cloudformation.Context block found.; Domain0491: No Metadata.com.aws.cloudformation.Context block found.; Domain0492: No Metadata.com.aws.cloudformation.Context block found.; Domain0493: No Metadata.com.aws.cloudformation.Context block found.; Domain0494: No Metadata.com.aws.cloudformation.Context block found.; Domain0495: No Metadata.com.aws.cloudformation.Context block found.; Domain0496: No Metadata.com.aws.cloudformation.Context block found.; Domain0497: No Metadata.com.aws.cloudformation.Context block found.; Domain0498: No Metadata.com.aws.cloudformation.Context block found.; Domain0499: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Domain0000", + "entityType": "Resource", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 13, + "relatedResources": [ + { + "resource": { + "id": "Domain0001", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0002", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0003", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0004", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0005", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0006", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0007", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0008", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0009", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0010", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0011", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0012", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0013", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 58, + "startColumn": 3, + "endLine": 58, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0014", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0015", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 66, + "startColumn": 3, + "endLine": 66, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0016", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0017", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0018", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0019", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0020", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0021", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0022", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0023", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 98, + "startColumn": 3, + "endLine": 98, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0024", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 102, + "startColumn": 3, + "endLine": 102, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0025", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0026", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0027", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 114, + "startColumn": 3, + "endLine": 114, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0028", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0029", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 122, + "startColumn": 3, + "endLine": 122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0030", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 126, + "startColumn": 3, + "endLine": 126, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0031", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0032", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0033", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 138, + "startColumn": 3, + "endLine": 138, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0034", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0035", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 146, + "startColumn": 3, + "endLine": 146, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0036", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 150, + "startColumn": 3, + "endLine": 150, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0037", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 154, + "startColumn": 3, + "endLine": 154, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0038", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0039", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 162, + "startColumn": 3, + "endLine": 162, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0040", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 166, + "startColumn": 3, + "endLine": 166, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0041", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 170, + "startColumn": 3, + "endLine": 170, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0042", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 174, + "startColumn": 3, + "endLine": 174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0043", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 178, + "startColumn": 3, + "endLine": 178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0044", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 182, + "startColumn": 3, + "endLine": 182, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0045", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 186, + "startColumn": 3, + "endLine": 186, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0046", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 190, + "startColumn": 3, + "endLine": 190, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0047", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 194, + "startColumn": 3, + "endLine": 194, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0048", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 198, + "startColumn": 3, + "endLine": 198, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0049", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 202, + "startColumn": 3, + "endLine": 202, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0050", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 206, + "startColumn": 3, + "endLine": 206, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0051", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0052", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0053", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 218, + "startColumn": 3, + "endLine": 218, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0054", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 222, + "startColumn": 3, + "endLine": 222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0055", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 226, + "startColumn": 3, + "endLine": 226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0056", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0057", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 234, + "startColumn": 3, + "endLine": 234, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0058", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 238, + "startColumn": 3, + "endLine": 238, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0059", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 242, + "startColumn": 3, + "endLine": 242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0060", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 246, + "startColumn": 3, + "endLine": 246, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0061", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 250, + "startColumn": 3, + "endLine": 250, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0062", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 254, + "startColumn": 3, + "endLine": 254, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0063", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 258, + "startColumn": 3, + "endLine": 258, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0064", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 262, + "startColumn": 3, + "endLine": 262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0065", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0066", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 270, + "startColumn": 3, + "endLine": 270, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0067", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 274, + "startColumn": 3, + "endLine": 274, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0068", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 278, + "startColumn": 3, + "endLine": 278, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0069", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 282, + "startColumn": 3, + "endLine": 282, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0070", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 286, + "startColumn": 3, + "endLine": 286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0071", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 290, + "startColumn": 3, + "endLine": 290, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0072", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 294, + "startColumn": 3, + "endLine": 294, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0073", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 298, + "startColumn": 3, + "endLine": 298, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0074", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0075", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 306, + "startColumn": 3, + "endLine": 306, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0076", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 310, + "startColumn": 3, + "endLine": 310, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0077", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 314, + "startColumn": 3, + "endLine": 314, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0078", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 318, + "startColumn": 3, + "endLine": 318, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0079", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 322, + "startColumn": 3, + "endLine": 322, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0080", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 326, + "startColumn": 3, + "endLine": 326, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0081", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 330, + "startColumn": 3, + "endLine": 330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0082", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 334, + "startColumn": 3, + "endLine": 334, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0083", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 338, + "startColumn": 3, + "endLine": 338, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0084", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 342, + "startColumn": 3, + "endLine": 342, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0085", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 346, + "startColumn": 3, + "endLine": 346, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0086", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 350, + "startColumn": 3, + "endLine": 350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0087", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 354, + "startColumn": 3, + "endLine": 354, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0088", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 358, + "startColumn": 3, + "endLine": 358, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0089", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 362, + "startColumn": 3, + "endLine": 362, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0090", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 366, + "startColumn": 3, + "endLine": 366, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0091", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 370, + "startColumn": 3, + "endLine": 370, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0092", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 374, + "startColumn": 3, + "endLine": 374, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0093", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 378, + "startColumn": 3, + "endLine": 378, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0094", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 382, + "startColumn": 3, + "endLine": 382, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0095", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0096", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 390, + "startColumn": 3, + "endLine": 390, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0097", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 394, + "startColumn": 3, + "endLine": 394, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0098", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 398, + "startColumn": 3, + "endLine": 398, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0099", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 402, + "startColumn": 3, + "endLine": 402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0100", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 406, + "startColumn": 3, + "endLine": 406, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0101", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0102", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 414, + "startColumn": 3, + "endLine": 414, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0103", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 418, + "startColumn": 3, + "endLine": 418, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0104", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 422, + "startColumn": 3, + "endLine": 422, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0105", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 426, + "startColumn": 3, + "endLine": 426, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0106", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 430, + "startColumn": 3, + "endLine": 430, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0107", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 434, + "startColumn": 3, + "endLine": 434, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0108", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 438, + "startColumn": 3, + "endLine": 438, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0109", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0110", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 446, + "startColumn": 3, + "endLine": 446, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0111", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 450, + "startColumn": 3, + "endLine": 450, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0112", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 454, + "startColumn": 3, + "endLine": 454, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0113", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 458, + "startColumn": 3, + "endLine": 458, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0114", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 462, + "startColumn": 3, + "endLine": 462, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0115", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 466, + "startColumn": 3, + "endLine": 466, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0116", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 470, + "startColumn": 3, + "endLine": 470, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0117", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 474, + "startColumn": 3, + "endLine": 474, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0118", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 478, + "startColumn": 3, + "endLine": 478, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0119", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 482, + "startColumn": 3, + "endLine": 482, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0120", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 486, + "startColumn": 3, + "endLine": 486, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0121", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0122", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 494, + "startColumn": 3, + "endLine": 494, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0123", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 498, + "startColumn": 3, + "endLine": 498, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0124", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 502, + "startColumn": 3, + "endLine": 502, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0125", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 506, + "startColumn": 3, + "endLine": 506, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0126", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 510, + "startColumn": 3, + "endLine": 510, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0127", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 514, + "startColumn": 3, + "endLine": 514, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0128", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 518, + "startColumn": 3, + "endLine": 518, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0129", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 522, + "startColumn": 3, + "endLine": 522, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0130", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 526, + "startColumn": 3, + "endLine": 526, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0131", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 530, + "startColumn": 3, + "endLine": 530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0132", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 534, + "startColumn": 3, + "endLine": 534, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0133", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 538, + "startColumn": 3, + "endLine": 538, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0134", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 542, + "startColumn": 3, + "endLine": 542, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0135", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 546, + "startColumn": 3, + "endLine": 546, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0136", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 550, + "startColumn": 3, + "endLine": 550, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0137", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 554, + "startColumn": 3, + "endLine": 554, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0138", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 558, + "startColumn": 3, + "endLine": 558, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0139", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 562, + "startColumn": 3, + "endLine": 562, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0140", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 566, + "startColumn": 3, + "endLine": 566, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0141", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 570, + "startColumn": 3, + "endLine": 570, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0142", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 574, + "startColumn": 3, + "endLine": 574, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0143", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 578, + "startColumn": 3, + "endLine": 578, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0144", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 582, + "startColumn": 3, + "endLine": 582, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0145", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 586, + "startColumn": 3, + "endLine": 586, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0146", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 590, + "startColumn": 3, + "endLine": 590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0147", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0148", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 598, + "startColumn": 3, + "endLine": 598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0149", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 602, + "startColumn": 3, + "endLine": 602, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0150", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 606, + "startColumn": 3, + "endLine": 606, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0151", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 610, + "startColumn": 3, + "endLine": 610, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0152", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0153", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 618, + "startColumn": 3, + "endLine": 618, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0154", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 622, + "startColumn": 3, + "endLine": 622, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0155", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 626, + "startColumn": 3, + "endLine": 626, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0156", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 630, + "startColumn": 3, + "endLine": 630, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0157", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 634, + "startColumn": 3, + "endLine": 634, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0158", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 638, + "startColumn": 3, + "endLine": 638, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0159", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 642, + "startColumn": 3, + "endLine": 642, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0160", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 646, + "startColumn": 3, + "endLine": 646, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0161", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 650, + "startColumn": 3, + "endLine": 650, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0162", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 654, + "startColumn": 3, + "endLine": 654, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0163", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 658, + "startColumn": 3, + "endLine": 658, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0164", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 662, + "startColumn": 3, + "endLine": 662, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0165", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 666, + "startColumn": 3, + "endLine": 666, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0166", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 670, + "startColumn": 3, + "endLine": 670, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0167", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 674, + "startColumn": 3, + "endLine": 674, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0168", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 678, + "startColumn": 3, + "endLine": 678, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0169", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 682, + "startColumn": 3, + "endLine": 682, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0170", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 686, + "startColumn": 3, + "endLine": 686, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0171", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 690, + "startColumn": 3, + "endLine": 690, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0172", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 694, + "startColumn": 3, + "endLine": 694, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0173", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 698, + "startColumn": 3, + "endLine": 698, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0174", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 702, + "startColumn": 3, + "endLine": 702, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0175", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 706, + "startColumn": 3, + "endLine": 706, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0176", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 710, + "startColumn": 3, + "endLine": 710, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0177", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 714, + "startColumn": 3, + "endLine": 714, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0178", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 718, + "startColumn": 3, + "endLine": 718, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0179", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 722, + "startColumn": 3, + "endLine": 722, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0180", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 726, + "startColumn": 3, + "endLine": 726, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0181", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 730, + "startColumn": 3, + "endLine": 730, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0182", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 734, + "startColumn": 3, + "endLine": 734, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0183", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 738, + "startColumn": 3, + "endLine": 738, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0184", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 742, + "startColumn": 3, + "endLine": 742, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0185", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 746, + "startColumn": 3, + "endLine": 746, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0186", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 750, + "startColumn": 3, + "endLine": 750, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0187", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 754, + "startColumn": 3, + "endLine": 754, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0188", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 758, + "startColumn": 3, + "endLine": 758, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0189", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 762, + "startColumn": 3, + "endLine": 762, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0190", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 766, + "startColumn": 3, + "endLine": 766, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0191", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 770, + "startColumn": 3, + "endLine": 770, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0192", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 774, + "startColumn": 3, + "endLine": 774, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0193", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 778, + "startColumn": 3, + "endLine": 778, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0194", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 782, + "startColumn": 3, + "endLine": 782, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0195", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 786, + "startColumn": 3, + "endLine": 786, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0196", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 790, + "startColumn": 3, + "endLine": 790, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0197", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 794, + "startColumn": 3, + "endLine": 794, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0198", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 798, + "startColumn": 3, + "endLine": 798, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0199", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 802, + "startColumn": 3, + "endLine": 802, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0200", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 806, + "startColumn": 3, + "endLine": 806, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0201", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 810, + "startColumn": 3, + "endLine": 810, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0202", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 814, + "startColumn": 3, + "endLine": 814, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0203", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 818, + "startColumn": 3, + "endLine": 818, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0204", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 822, + "startColumn": 3, + "endLine": 822, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0205", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 826, + "startColumn": 3, + "endLine": 826, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0206", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 830, + "startColumn": 3, + "endLine": 830, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0207", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 834, + "startColumn": 3, + "endLine": 834, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0208", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 838, + "startColumn": 3, + "endLine": 838, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0209", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 842, + "startColumn": 3, + "endLine": 842, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0210", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 846, + "startColumn": 3, + "endLine": 846, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0211", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 850, + "startColumn": 3, + "endLine": 850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0212", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 854, + "startColumn": 3, + "endLine": 854, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0213", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 858, + "startColumn": 3, + "endLine": 858, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0214", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 862, + "startColumn": 3, + "endLine": 862, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0215", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 866, + "startColumn": 3, + "endLine": 866, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0216", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 870, + "startColumn": 3, + "endLine": 870, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0217", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 874, + "startColumn": 3, + "endLine": 874, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0218", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 878, + "startColumn": 3, + "endLine": 878, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0219", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 882, + "startColumn": 3, + "endLine": 882, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0220", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 886, + "startColumn": 3, + "endLine": 886, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0221", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 890, + "startColumn": 3, + "endLine": 890, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0222", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0223", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 898, + "startColumn": 3, + "endLine": 898, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0224", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 902, + "startColumn": 3, + "endLine": 902, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0225", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 906, + "startColumn": 3, + "endLine": 906, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0226", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 910, + "startColumn": 3, + "endLine": 910, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0227", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 914, + "startColumn": 3, + "endLine": 914, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0228", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 918, + "startColumn": 3, + "endLine": 918, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0229", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 922, + "startColumn": 3, + "endLine": 922, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0230", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 926, + "startColumn": 3, + "endLine": 926, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0231", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 930, + "startColumn": 3, + "endLine": 930, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0232", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 934, + "startColumn": 3, + "endLine": 934, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0233", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 938, + "startColumn": 3, + "endLine": 938, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0234", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 942, + "startColumn": 3, + "endLine": 942, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0235", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 946, + "startColumn": 3, + "endLine": 946, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0236", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 950, + "startColumn": 3, + "endLine": 950, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0237", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0238", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 958, + "startColumn": 3, + "endLine": 958, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0239", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 962, + "startColumn": 3, + "endLine": 962, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0240", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 966, + "startColumn": 3, + "endLine": 966, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0241", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 970, + "startColumn": 3, + "endLine": 970, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0242", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 974, + "startColumn": 3, + "endLine": 974, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0243", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 978, + "startColumn": 3, + "endLine": 978, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0244", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 982, + "startColumn": 3, + "endLine": 982, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0245", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 986, + "startColumn": 3, + "endLine": 986, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0246", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 990, + "startColumn": 3, + "endLine": 990, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0247", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 994, + "startColumn": 3, + "endLine": 994, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0248", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 998, + "startColumn": 3, + "endLine": 998, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0249", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1002, + "startColumn": 3, + "endLine": 1002, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0250", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1006, + "startColumn": 3, + "endLine": 1006, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0251", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1010, + "startColumn": 3, + "endLine": 1010, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0252", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1014, + "startColumn": 3, + "endLine": 1014, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0253", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1018, + "startColumn": 3, + "endLine": 1018, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0254", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1022, + "startColumn": 3, + "endLine": 1022, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0255", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1026, + "startColumn": 3, + "endLine": 1026, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0256", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1030, + "startColumn": 3, + "endLine": 1030, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0257", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1034, + "startColumn": 3, + "endLine": 1034, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0258", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1038, + "startColumn": 3, + "endLine": 1038, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0259", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1042, + "startColumn": 3, + "endLine": 1042, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0260", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1046, + "startColumn": 3, + "endLine": 1046, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0261", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1050, + "startColumn": 3, + "endLine": 1050, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0262", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1054, + "startColumn": 3, + "endLine": 1054, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0263", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1058, + "startColumn": 3, + "endLine": 1058, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0264", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1062, + "startColumn": 3, + "endLine": 1062, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0265", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1066, + "startColumn": 3, + "endLine": 1066, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0266", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1070, + "startColumn": 3, + "endLine": 1070, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0267", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1074, + "startColumn": 3, + "endLine": 1074, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0268", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1078, + "startColumn": 3, + "endLine": 1078, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0269", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1082, + "startColumn": 3, + "endLine": 1082, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0270", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1086, + "startColumn": 3, + "endLine": 1086, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0271", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1090, + "startColumn": 3, + "endLine": 1090, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0272", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1094, + "startColumn": 3, + "endLine": 1094, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0273", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1098, + "startColumn": 3, + "endLine": 1098, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0274", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1102, + "startColumn": 3, + "endLine": 1102, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0275", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1106, + "startColumn": 3, + "endLine": 1106, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0276", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1110, + "startColumn": 3, + "endLine": 1110, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0277", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1114, + "startColumn": 3, + "endLine": 1114, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0278", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1118, + "startColumn": 3, + "endLine": 1118, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0279", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1122, + "startColumn": 3, + "endLine": 1122, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0280", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1126, + "startColumn": 3, + "endLine": 1126, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0281", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1130, + "startColumn": 3, + "endLine": 1130, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0282", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1134, + "startColumn": 3, + "endLine": 1134, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0283", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1138, + "startColumn": 3, + "endLine": 1138, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0284", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1142, + "startColumn": 3, + "endLine": 1142, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0285", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1146, + "startColumn": 3, + "endLine": 1146, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0286", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1150, + "startColumn": 3, + "endLine": 1150, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0287", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1154, + "startColumn": 3, + "endLine": 1154, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0288", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1158, + "startColumn": 3, + "endLine": 1158, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0289", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1162, + "startColumn": 3, + "endLine": 1162, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0290", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1166, + "startColumn": 3, + "endLine": 1166, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0291", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1170, + "startColumn": 3, + "endLine": 1170, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0292", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1174, + "startColumn": 3, + "endLine": 1174, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0293", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1178, + "startColumn": 3, + "endLine": 1178, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0294", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1182, + "startColumn": 3, + "endLine": 1182, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0295", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1186, + "startColumn": 3, + "endLine": 1186, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0296", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1190, + "startColumn": 3, + "endLine": 1190, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0297", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1194, + "startColumn": 3, + "endLine": 1194, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0298", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1198, + "startColumn": 3, + "endLine": 1198, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0299", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1202, + "startColumn": 3, + "endLine": 1202, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0300", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1206, + "startColumn": 3, + "endLine": 1206, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0301", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1210, + "startColumn": 3, + "endLine": 1210, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0302", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1214, + "startColumn": 3, + "endLine": 1214, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0303", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1218, + "startColumn": 3, + "endLine": 1218, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0304", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1222, + "startColumn": 3, + "endLine": 1222, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0305", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1226, + "startColumn": 3, + "endLine": 1226, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0306", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1230, + "startColumn": 3, + "endLine": 1230, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0307", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1234, + "startColumn": 3, + "endLine": 1234, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0308", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1238, + "startColumn": 3, + "endLine": 1238, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0309", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1242, + "startColumn": 3, + "endLine": 1242, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0310", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1246, + "startColumn": 3, + "endLine": 1246, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0311", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1250, + "startColumn": 3, + "endLine": 1250, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0312", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1254, + "startColumn": 3, + "endLine": 1254, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0313", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1258, + "startColumn": 3, + "endLine": 1258, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0314", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1262, + "startColumn": 3, + "endLine": 1262, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0315", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1266, + "startColumn": 3, + "endLine": 1266, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0316", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1270, + "startColumn": 3, + "endLine": 1270, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0317", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1274, + "startColumn": 3, + "endLine": 1274, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0318", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1278, + "startColumn": 3, + "endLine": 1278, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0319", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1282, + "startColumn": 3, + "endLine": 1282, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0320", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1286, + "startColumn": 3, + "endLine": 1286, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0321", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1290, + "startColumn": 3, + "endLine": 1290, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0322", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1294, + "startColumn": 3, + "endLine": 1294, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0323", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1298, + "startColumn": 3, + "endLine": 1298, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0324", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1302, + "startColumn": 3, + "endLine": 1302, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0325", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1306, + "startColumn": 3, + "endLine": 1306, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0326", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1310, + "startColumn": 3, + "endLine": 1310, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0327", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1314, + "startColumn": 3, + "endLine": 1314, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0328", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1318, + "startColumn": 3, + "endLine": 1318, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0329", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1322, + "startColumn": 3, + "endLine": 1322, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0330", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1326, + "startColumn": 3, + "endLine": 1326, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0331", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1330, + "startColumn": 3, + "endLine": 1330, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0332", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1334, + "startColumn": 3, + "endLine": 1334, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0333", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1338, + "startColumn": 3, + "endLine": 1338, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0334", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1342, + "startColumn": 3, + "endLine": 1342, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0335", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1346, + "startColumn": 3, + "endLine": 1346, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0336", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1350, + "startColumn": 3, + "endLine": 1350, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0337", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1354, + "startColumn": 3, + "endLine": 1354, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0338", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1358, + "startColumn": 3, + "endLine": 1358, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0339", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1362, + "startColumn": 3, + "endLine": 1362, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0340", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1366, + "startColumn": 3, + "endLine": 1366, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0341", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1370, + "startColumn": 3, + "endLine": 1370, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0342", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1374, + "startColumn": 3, + "endLine": 1374, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0343", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1378, + "startColumn": 3, + "endLine": 1378, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0344", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1382, + "startColumn": 3, + "endLine": 1382, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0345", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1386, + "startColumn": 3, + "endLine": 1386, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0346", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1390, + "startColumn": 3, + "endLine": 1390, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0347", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1394, + "startColumn": 3, + "endLine": 1394, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0348", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1398, + "startColumn": 3, + "endLine": 1398, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0349", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1402, + "startColumn": 3, + "endLine": 1402, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0350", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1406, + "startColumn": 3, + "endLine": 1406, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0351", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1410, + "startColumn": 3, + "endLine": 1410, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0352", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1414, + "startColumn": 3, + "endLine": 1414, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0353", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1418, + "startColumn": 3, + "endLine": 1418, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0354", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1422, + "startColumn": 3, + "endLine": 1422, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0355", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1426, + "startColumn": 3, + "endLine": 1426, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0356", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1430, + "startColumn": 3, + "endLine": 1430, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0357", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1434, + "startColumn": 3, + "endLine": 1434, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0358", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1438, + "startColumn": 3, + "endLine": 1438, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0359", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1442, + "startColumn": 3, + "endLine": 1442, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0360", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1446, + "startColumn": 3, + "endLine": 1446, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0361", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1450, + "startColumn": 3, + "endLine": 1450, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0362", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1454, + "startColumn": 3, + "endLine": 1454, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0363", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1458, + "startColumn": 3, + "endLine": 1458, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0364", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1462, + "startColumn": 3, + "endLine": 1462, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0365", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1466, + "startColumn": 3, + "endLine": 1466, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0366", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1470, + "startColumn": 3, + "endLine": 1470, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0367", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1474, + "startColumn": 3, + "endLine": 1474, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0368", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1478, + "startColumn": 3, + "endLine": 1478, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0369", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1482, + "startColumn": 3, + "endLine": 1482, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0370", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1486, + "startColumn": 3, + "endLine": 1486, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0371", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1490, + "startColumn": 3, + "endLine": 1490, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0372", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1494, + "startColumn": 3, + "endLine": 1494, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0373", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1498, + "startColumn": 3, + "endLine": 1498, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0374", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1502, + "startColumn": 3, + "endLine": 1502, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0375", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1506, + "startColumn": 3, + "endLine": 1506, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0376", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1510, + "startColumn": 3, + "endLine": 1510, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0377", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1514, + "startColumn": 3, + "endLine": 1514, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0378", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1518, + "startColumn": 3, + "endLine": 1518, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0379", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1522, + "startColumn": 3, + "endLine": 1522, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0380", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1526, + "startColumn": 3, + "endLine": 1526, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0381", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1530, + "startColumn": 3, + "endLine": 1530, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0382", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1534, + "startColumn": 3, + "endLine": 1534, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0383", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1538, + "startColumn": 3, + "endLine": 1538, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0384", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1542, + "startColumn": 3, + "endLine": 1542, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0385", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1546, + "startColumn": 3, + "endLine": 1546, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0386", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1550, + "startColumn": 3, + "endLine": 1550, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0387", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1554, + "startColumn": 3, + "endLine": 1554, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0388", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1558, + "startColumn": 3, + "endLine": 1558, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0389", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1562, + "startColumn": 3, + "endLine": 1562, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0390", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1566, + "startColumn": 3, + "endLine": 1566, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0391", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1570, + "startColumn": 3, + "endLine": 1570, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0392", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1574, + "startColumn": 3, + "endLine": 1574, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0393", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1578, + "startColumn": 3, + "endLine": 1578, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0394", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1582, + "startColumn": 3, + "endLine": 1582, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0395", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1586, + "startColumn": 3, + "endLine": 1586, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0396", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1590, + "startColumn": 3, + "endLine": 1590, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0397", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1594, + "startColumn": 3, + "endLine": 1594, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0398", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1598, + "startColumn": 3, + "endLine": 1598, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0399", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1602, + "startColumn": 3, + "endLine": 1602, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0400", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1606, + "startColumn": 3, + "endLine": 1606, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0401", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1610, + "startColumn": 3, + "endLine": 1610, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0402", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1614, + "startColumn": 3, + "endLine": 1614, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0403", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1618, + "startColumn": 3, + "endLine": 1618, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0404", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1622, + "startColumn": 3, + "endLine": 1622, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0405", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1626, + "startColumn": 3, + "endLine": 1626, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0406", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1630, + "startColumn": 3, + "endLine": 1630, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0407", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1634, + "startColumn": 3, + "endLine": 1634, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0408", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1638, + "startColumn": 3, + "endLine": 1638, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0409", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1642, + "startColumn": 3, + "endLine": 1642, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0410", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1646, + "startColumn": 3, + "endLine": 1646, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0411", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1650, + "startColumn": 3, + "endLine": 1650, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0412", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1654, + "startColumn": 3, + "endLine": 1654, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0413", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1658, + "startColumn": 3, + "endLine": 1658, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0414", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1662, + "startColumn": 3, + "endLine": 1662, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0415", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1666, + "startColumn": 3, + "endLine": 1666, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0416", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1670, + "startColumn": 3, + "endLine": 1670, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0417", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1674, + "startColumn": 3, + "endLine": 1674, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0418", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1678, + "startColumn": 3, + "endLine": 1678, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0419", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1682, + "startColumn": 3, + "endLine": 1682, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0420", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1686, + "startColumn": 3, + "endLine": 1686, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0421", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1690, + "startColumn": 3, + "endLine": 1690, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0422", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1694, + "startColumn": 3, + "endLine": 1694, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0423", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1698, + "startColumn": 3, + "endLine": 1698, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0424", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1702, + "startColumn": 3, + "endLine": 1702, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0425", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1706, + "startColumn": 3, + "endLine": 1706, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0426", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1710, + "startColumn": 3, + "endLine": 1710, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0427", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1714, + "startColumn": 3, + "endLine": 1714, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0428", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1718, + "startColumn": 3, + "endLine": 1718, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0429", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1722, + "startColumn": 3, + "endLine": 1722, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0430", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1726, + "startColumn": 3, + "endLine": 1726, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0431", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1730, + "startColumn": 3, + "endLine": 1730, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0432", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1734, + "startColumn": 3, + "endLine": 1734, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0433", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1738, + "startColumn": 3, + "endLine": 1738, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0434", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1742, + "startColumn": 3, + "endLine": 1742, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0435", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1746, + "startColumn": 3, + "endLine": 1746, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0436", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1750, + "startColumn": 3, + "endLine": 1750, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0437", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1754, + "startColumn": 3, + "endLine": 1754, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0438", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1758, + "startColumn": 3, + "endLine": 1758, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0439", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1762, + "startColumn": 3, + "endLine": 1762, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0440", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1766, + "startColumn": 3, + "endLine": 1766, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0441", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1770, + "startColumn": 3, + "endLine": 1770, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0442", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1774, + "startColumn": 3, + "endLine": 1774, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0443", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1778, + "startColumn": 3, + "endLine": 1778, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0444", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1782, + "startColumn": 3, + "endLine": 1782, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0445", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1786, + "startColumn": 3, + "endLine": 1786, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0446", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1790, + "startColumn": 3, + "endLine": 1790, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0447", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1794, + "startColumn": 3, + "endLine": 1794, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0448", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1798, + "startColumn": 3, + "endLine": 1798, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0449", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1802, + "startColumn": 3, + "endLine": 1802, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0450", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1806, + "startColumn": 3, + "endLine": 1806, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0451", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1810, + "startColumn": 3, + "endLine": 1810, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0452", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1814, + "startColumn": 3, + "endLine": 1814, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0453", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1818, + "startColumn": 3, + "endLine": 1818, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0454", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1822, + "startColumn": 3, + "endLine": 1822, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0455", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1826, + "startColumn": 3, + "endLine": 1826, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0456", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1830, + "startColumn": 3, + "endLine": 1830, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0457", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1834, + "startColumn": 3, + "endLine": 1834, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0458", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1838, + "startColumn": 3, + "endLine": 1838, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0459", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1842, + "startColumn": 3, + "endLine": 1842, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0460", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1846, + "startColumn": 3, + "endLine": 1846, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0461", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1850, + "startColumn": 3, + "endLine": 1850, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0462", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1854, + "startColumn": 3, + "endLine": 1854, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0463", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1858, + "startColumn": 3, + "endLine": 1858, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0464", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1862, + "startColumn": 3, + "endLine": 1862, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0465", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1866, + "startColumn": 3, + "endLine": 1866, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0466", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1870, + "startColumn": 3, + "endLine": 1870, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0467", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1874, + "startColumn": 3, + "endLine": 1874, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0468", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1878, + "startColumn": 3, + "endLine": 1878, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0469", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1882, + "startColumn": 3, + "endLine": 1882, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0470", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1886, + "startColumn": 3, + "endLine": 1886, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0471", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1890, + "startColumn": 3, + "endLine": 1890, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0472", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1894, + "startColumn": 3, + "endLine": 1894, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0473", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1898, + "startColumn": 3, + "endLine": 1898, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0474", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1902, + "startColumn": 3, + "endLine": 1902, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0475", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1906, + "startColumn": 3, + "endLine": 1906, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0476", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1910, + "startColumn": 3, + "endLine": 1910, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0477", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1914, + "startColumn": 3, + "endLine": 1914, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0478", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1918, + "startColumn": 3, + "endLine": 1918, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0479", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1922, + "startColumn": 3, + "endLine": 1922, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0480", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1926, + "startColumn": 3, + "endLine": 1926, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0481", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1930, + "startColumn": 3, + "endLine": 1930, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0482", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1934, + "startColumn": 3, + "endLine": 1934, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0483", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1938, + "startColumn": 3, + "endLine": 1938, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0484", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1942, + "startColumn": 3, + "endLine": 1942, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0485", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1946, + "startColumn": 3, + "endLine": 1946, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0486", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1950, + "startColumn": 3, + "endLine": 1950, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0487", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1954, + "startColumn": 3, + "endLine": 1954, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0488", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1958, + "startColumn": 3, + "endLine": 1958, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0489", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1962, + "startColumn": 3, + "endLine": 1962, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0490", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1966, + "startColumn": 3, + "endLine": 1966, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0491", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1970, + "startColumn": 3, + "endLine": 1970, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0492", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1974, + "startColumn": 3, + "endLine": 1974, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0493", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1978, + "startColumn": 3, + "endLine": 1978, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0494", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1982, + "startColumn": 3, + "endLine": 1982, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0495", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1986, + "startColumn": 3, + "endLine": 1986, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0496", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1990, + "startColumn": 3, + "endLine": 1990, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0497", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1994, + "startColumn": 3, + "endLine": 1994, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0498", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 1998, + "startColumn": 3, + "endLine": 1998, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Domain0499", + "resourceType": "AWS::ApiGateway::DomainName" + }, + "location": { + "startLine": 2002, + "startColumn": 3, + "endLine": 2002, + "endColumn": 13 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9001", "severity": "INFO", @@ -297787,7 +374879,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 372, + "warnings": 374, "informational": 1, "debug": 0 }, @@ -303613,6 +380705,45 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 223, + "startColumn": 1, + "endLine": 223, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): GatedTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GatedTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 224, + "startColumn": 3, + "endLine": 224, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", @@ -303632,27 +380763,6555 @@ "endColumn": 15, "ruleDescription": "Resource should have Tags", "phase": "LINT" - } - ] - }, - "security/many_resources.yaml": { - "filePath": "security/many_resources.yaml", - "status": "OK", - "version": "1.8.0", - "metadata": { - "resourcesScanned": 500, - "counts": { - "fatal": 0, - "errors": 0, - "warnings": 0, - "informational": 500, - "debug": 0 + } + ] + }, + "security/many_resources.yaml": { + "filePath": "security/many_resources.yaml", + "status": "OK", + "version": "1.8.0", + "metadata": { + "resourcesScanned": 500, + "counts": { + "fatal": 0, + "errors": 0, + "warnings": 2, + "informational": 500, + "debug": 0 + }, + "suppressed": 0, + "strict": false, + "severityLevel": "DEBUG" + }, + "diagnostics": [ + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 5, + "startColumn": 1, + "endLine": 5, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (500 resource(s)): Topic0000: No Metadata.com.aws.cloudformation.Context block found.; Topic0001: No Metadata.com.aws.cloudformation.Context block found.; Topic0002: No Metadata.com.aws.cloudformation.Context block found.; Topic0003: No Metadata.com.aws.cloudformation.Context block found.; Topic0004: No Metadata.com.aws.cloudformation.Context block found.; Topic0005: No Metadata.com.aws.cloudformation.Context block found.; Topic0006: No Metadata.com.aws.cloudformation.Context block found.; Topic0007: No Metadata.com.aws.cloudformation.Context block found.; Topic0008: No Metadata.com.aws.cloudformation.Context block found.; Topic0009: No Metadata.com.aws.cloudformation.Context block found.; Topic0010: No Metadata.com.aws.cloudformation.Context block found.; Topic0011: No Metadata.com.aws.cloudformation.Context block found.; Topic0012: No Metadata.com.aws.cloudformation.Context block found.; Topic0013: No Metadata.com.aws.cloudformation.Context block found.; Topic0014: No Metadata.com.aws.cloudformation.Context block found.; Topic0015: No Metadata.com.aws.cloudformation.Context block found.; Topic0016: No Metadata.com.aws.cloudformation.Context block found.; Topic0017: No Metadata.com.aws.cloudformation.Context block found.; Topic0018: No Metadata.com.aws.cloudformation.Context block found.; Topic0019: No Metadata.com.aws.cloudformation.Context block found.; Topic0020: No Metadata.com.aws.cloudformation.Context block found.; Topic0021: No Metadata.com.aws.cloudformation.Context block found.; Topic0022: No Metadata.com.aws.cloudformation.Context block found.; Topic0023: No Metadata.com.aws.cloudformation.Context block found.; Topic0024: No Metadata.com.aws.cloudformation.Context block found.; Topic0025: No Metadata.com.aws.cloudformation.Context block found.; Topic0026: No Metadata.com.aws.cloudformation.Context block found.; Topic0027: No Metadata.com.aws.cloudformation.Context block found.; Topic0028: No Metadata.com.aws.cloudformation.Context block found.; Topic0029: No Metadata.com.aws.cloudformation.Context block found.; Topic0030: No Metadata.com.aws.cloudformation.Context block found.; Topic0031: No Metadata.com.aws.cloudformation.Context block found.; Topic0032: No Metadata.com.aws.cloudformation.Context block found.; Topic0033: No Metadata.com.aws.cloudformation.Context block found.; Topic0034: No Metadata.com.aws.cloudformation.Context block found.; Topic0035: No Metadata.com.aws.cloudformation.Context block found.; Topic0036: No Metadata.com.aws.cloudformation.Context block found.; Topic0037: No Metadata.com.aws.cloudformation.Context block found.; Topic0038: No Metadata.com.aws.cloudformation.Context block found.; Topic0039: No Metadata.com.aws.cloudformation.Context block found.; Topic0040: No Metadata.com.aws.cloudformation.Context block found.; Topic0041: No Metadata.com.aws.cloudformation.Context block found.; Topic0042: No Metadata.com.aws.cloudformation.Context block found.; Topic0043: No Metadata.com.aws.cloudformation.Context block found.; Topic0044: No Metadata.com.aws.cloudformation.Context block found.; Topic0045: No Metadata.com.aws.cloudformation.Context block found.; Topic0046: No Metadata.com.aws.cloudformation.Context block found.; Topic0047: No Metadata.com.aws.cloudformation.Context block found.; Topic0048: No Metadata.com.aws.cloudformation.Context block found.; Topic0049: No Metadata.com.aws.cloudformation.Context block found.; Topic0050: No Metadata.com.aws.cloudformation.Context block found.; Topic0051: No Metadata.com.aws.cloudformation.Context block found.; Topic0052: No Metadata.com.aws.cloudformation.Context block found.; Topic0053: No Metadata.com.aws.cloudformation.Context block found.; Topic0054: No Metadata.com.aws.cloudformation.Context block found.; Topic0055: No Metadata.com.aws.cloudformation.Context block found.; Topic0056: No Metadata.com.aws.cloudformation.Context block found.; Topic0057: No Metadata.com.aws.cloudformation.Context block found.; Topic0058: No Metadata.com.aws.cloudformation.Context block found.; Topic0059: No Metadata.com.aws.cloudformation.Context block found.; Topic0060: No Metadata.com.aws.cloudformation.Context block found.; Topic0061: No Metadata.com.aws.cloudformation.Context block found.; Topic0062: No Metadata.com.aws.cloudformation.Context block found.; Topic0063: No Metadata.com.aws.cloudformation.Context block found.; Topic0064: No Metadata.com.aws.cloudformation.Context block found.; Topic0065: No Metadata.com.aws.cloudformation.Context block found.; Topic0066: No Metadata.com.aws.cloudformation.Context block found.; Topic0067: No Metadata.com.aws.cloudformation.Context block found.; Topic0068: No Metadata.com.aws.cloudformation.Context block found.; Topic0069: No Metadata.com.aws.cloudformation.Context block found.; Topic0070: No Metadata.com.aws.cloudformation.Context block found.; Topic0071: No Metadata.com.aws.cloudformation.Context block found.; Topic0072: No Metadata.com.aws.cloudformation.Context block found.; Topic0073: No Metadata.com.aws.cloudformation.Context block found.; Topic0074: No Metadata.com.aws.cloudformation.Context block found.; Topic0075: No Metadata.com.aws.cloudformation.Context block found.; Topic0076: No Metadata.com.aws.cloudformation.Context block found.; Topic0077: No Metadata.com.aws.cloudformation.Context block found.; Topic0078: No Metadata.com.aws.cloudformation.Context block found.; Topic0079: No Metadata.com.aws.cloudformation.Context block found.; Topic0080: No Metadata.com.aws.cloudformation.Context block found.; Topic0081: No Metadata.com.aws.cloudformation.Context block found.; Topic0082: No Metadata.com.aws.cloudformation.Context block found.; Topic0083: No Metadata.com.aws.cloudformation.Context block found.; Topic0084: No Metadata.com.aws.cloudformation.Context block found.; Topic0085: No Metadata.com.aws.cloudformation.Context block found.; Topic0086: No Metadata.com.aws.cloudformation.Context block found.; Topic0087: No Metadata.com.aws.cloudformation.Context block found.; Topic0088: No Metadata.com.aws.cloudformation.Context block found.; Topic0089: No Metadata.com.aws.cloudformation.Context block found.; Topic0090: No Metadata.com.aws.cloudformation.Context block found.; Topic0091: No Metadata.com.aws.cloudformation.Context block found.; Topic0092: No Metadata.com.aws.cloudformation.Context block found.; Topic0093: No Metadata.com.aws.cloudformation.Context block found.; Topic0094: No Metadata.com.aws.cloudformation.Context block found.; Topic0095: No Metadata.com.aws.cloudformation.Context block found.; Topic0096: No Metadata.com.aws.cloudformation.Context block found.; Topic0097: No Metadata.com.aws.cloudformation.Context block found.; Topic0098: No Metadata.com.aws.cloudformation.Context block found.; Topic0099: No Metadata.com.aws.cloudformation.Context block found.; Topic0100: No Metadata.com.aws.cloudformation.Context block found.; Topic0101: No Metadata.com.aws.cloudformation.Context block found.; Topic0102: No Metadata.com.aws.cloudformation.Context block found.; Topic0103: No Metadata.com.aws.cloudformation.Context block found.; Topic0104: No Metadata.com.aws.cloudformation.Context block found.; Topic0105: No Metadata.com.aws.cloudformation.Context block found.; Topic0106: No Metadata.com.aws.cloudformation.Context block found.; Topic0107: No Metadata.com.aws.cloudformation.Context block found.; Topic0108: No Metadata.com.aws.cloudformation.Context block found.; Topic0109: No Metadata.com.aws.cloudformation.Context block found.; Topic0110: No Metadata.com.aws.cloudformation.Context block found.; Topic0111: No Metadata.com.aws.cloudformation.Context block found.; Topic0112: No Metadata.com.aws.cloudformation.Context block found.; Topic0113: No Metadata.com.aws.cloudformation.Context block found.; Topic0114: No Metadata.com.aws.cloudformation.Context block found.; Topic0115: No Metadata.com.aws.cloudformation.Context block found.; Topic0116: No Metadata.com.aws.cloudformation.Context block found.; Topic0117: No Metadata.com.aws.cloudformation.Context block found.; Topic0118: No Metadata.com.aws.cloudformation.Context block found.; Topic0119: No Metadata.com.aws.cloudformation.Context block found.; Topic0120: No Metadata.com.aws.cloudformation.Context block found.; Topic0121: No Metadata.com.aws.cloudformation.Context block found.; Topic0122: No Metadata.com.aws.cloudformation.Context block found.; Topic0123: No Metadata.com.aws.cloudformation.Context block found.; Topic0124: No Metadata.com.aws.cloudformation.Context block found.; Topic0125: No Metadata.com.aws.cloudformation.Context block found.; Topic0126: No Metadata.com.aws.cloudformation.Context block found.; Topic0127: No Metadata.com.aws.cloudformation.Context block found.; Topic0128: No Metadata.com.aws.cloudformation.Context block found.; Topic0129: No Metadata.com.aws.cloudformation.Context block found.; Topic0130: No Metadata.com.aws.cloudformation.Context block found.; Topic0131: No Metadata.com.aws.cloudformation.Context block found.; Topic0132: No Metadata.com.aws.cloudformation.Context block found.; Topic0133: No Metadata.com.aws.cloudformation.Context block found.; Topic0134: No Metadata.com.aws.cloudformation.Context block found.; Topic0135: No Metadata.com.aws.cloudformation.Context block found.; Topic0136: No Metadata.com.aws.cloudformation.Context block found.; Topic0137: No Metadata.com.aws.cloudformation.Context block found.; Topic0138: No Metadata.com.aws.cloudformation.Context block found.; Topic0139: No Metadata.com.aws.cloudformation.Context block found.; Topic0140: No Metadata.com.aws.cloudformation.Context block found.; Topic0141: No Metadata.com.aws.cloudformation.Context block found.; Topic0142: No Metadata.com.aws.cloudformation.Context block found.; Topic0143: No Metadata.com.aws.cloudformation.Context block found.; Topic0144: No Metadata.com.aws.cloudformation.Context block found.; Topic0145: No Metadata.com.aws.cloudformation.Context block found.; Topic0146: No Metadata.com.aws.cloudformation.Context block found.; Topic0147: No Metadata.com.aws.cloudformation.Context block found.; Topic0148: No Metadata.com.aws.cloudformation.Context block found.; Topic0149: No Metadata.com.aws.cloudformation.Context block found.; Topic0150: No Metadata.com.aws.cloudformation.Context block found.; Topic0151: No Metadata.com.aws.cloudformation.Context block found.; Topic0152: No Metadata.com.aws.cloudformation.Context block found.; Topic0153: No Metadata.com.aws.cloudformation.Context block found.; Topic0154: No Metadata.com.aws.cloudformation.Context block found.; Topic0155: No Metadata.com.aws.cloudformation.Context block found.; Topic0156: No Metadata.com.aws.cloudformation.Context block found.; Topic0157: No Metadata.com.aws.cloudformation.Context block found.; Topic0158: No Metadata.com.aws.cloudformation.Context block found.; Topic0159: No Metadata.com.aws.cloudformation.Context block found.; Topic0160: No Metadata.com.aws.cloudformation.Context block found.; Topic0161: No Metadata.com.aws.cloudformation.Context block found.; Topic0162: No Metadata.com.aws.cloudformation.Context block found.; Topic0163: No Metadata.com.aws.cloudformation.Context block found.; Topic0164: No Metadata.com.aws.cloudformation.Context block found.; Topic0165: No Metadata.com.aws.cloudformation.Context block found.; Topic0166: No Metadata.com.aws.cloudformation.Context block found.; Topic0167: No Metadata.com.aws.cloudformation.Context block found.; Topic0168: No Metadata.com.aws.cloudformation.Context block found.; Topic0169: No Metadata.com.aws.cloudformation.Context block found.; Topic0170: No Metadata.com.aws.cloudformation.Context block found.; Topic0171: No Metadata.com.aws.cloudformation.Context block found.; Topic0172: No Metadata.com.aws.cloudformation.Context block found.; Topic0173: No Metadata.com.aws.cloudformation.Context block found.; Topic0174: No Metadata.com.aws.cloudformation.Context block found.; Topic0175: No Metadata.com.aws.cloudformation.Context block found.; Topic0176: No Metadata.com.aws.cloudformation.Context block found.; Topic0177: No Metadata.com.aws.cloudformation.Context block found.; Topic0178: No Metadata.com.aws.cloudformation.Context block found.; Topic0179: No Metadata.com.aws.cloudformation.Context block found.; Topic0180: No Metadata.com.aws.cloudformation.Context block found.; Topic0181: No Metadata.com.aws.cloudformation.Context block found.; Topic0182: No Metadata.com.aws.cloudformation.Context block found.; Topic0183: No Metadata.com.aws.cloudformation.Context block found.; Topic0184: No Metadata.com.aws.cloudformation.Context block found.; Topic0185: No Metadata.com.aws.cloudformation.Context block found.; Topic0186: No Metadata.com.aws.cloudformation.Context block found.; Topic0187: No Metadata.com.aws.cloudformation.Context block found.; Topic0188: No Metadata.com.aws.cloudformation.Context block found.; Topic0189: No Metadata.com.aws.cloudformation.Context block found.; Topic0190: No Metadata.com.aws.cloudformation.Context block found.; Topic0191: No Metadata.com.aws.cloudformation.Context block found.; Topic0192: No Metadata.com.aws.cloudformation.Context block found.; Topic0193: No Metadata.com.aws.cloudformation.Context block found.; Topic0194: No Metadata.com.aws.cloudformation.Context block found.; Topic0195: No Metadata.com.aws.cloudformation.Context block found.; Topic0196: No Metadata.com.aws.cloudformation.Context block found.; Topic0197: No Metadata.com.aws.cloudformation.Context block found.; Topic0198: No Metadata.com.aws.cloudformation.Context block found.; Topic0199: No Metadata.com.aws.cloudformation.Context block found.; Topic0200: No Metadata.com.aws.cloudformation.Context block found.; Topic0201: No Metadata.com.aws.cloudformation.Context block found.; Topic0202: No Metadata.com.aws.cloudformation.Context block found.; Topic0203: No Metadata.com.aws.cloudformation.Context block found.; Topic0204: No Metadata.com.aws.cloudformation.Context block found.; Topic0205: No Metadata.com.aws.cloudformation.Context block found.; Topic0206: No Metadata.com.aws.cloudformation.Context block found.; Topic0207: No Metadata.com.aws.cloudformation.Context block found.; Topic0208: No Metadata.com.aws.cloudformation.Context block found.; Topic0209: No Metadata.com.aws.cloudformation.Context block found.; Topic0210: No Metadata.com.aws.cloudformation.Context block found.; Topic0211: No Metadata.com.aws.cloudformation.Context block found.; Topic0212: No Metadata.com.aws.cloudformation.Context block found.; Topic0213: No Metadata.com.aws.cloudformation.Context block found.; Topic0214: No Metadata.com.aws.cloudformation.Context block found.; Topic0215: No Metadata.com.aws.cloudformation.Context block found.; Topic0216: No Metadata.com.aws.cloudformation.Context block found.; Topic0217: No Metadata.com.aws.cloudformation.Context block found.; Topic0218: No Metadata.com.aws.cloudformation.Context block found.; Topic0219: No Metadata.com.aws.cloudformation.Context block found.; Topic0220: No Metadata.com.aws.cloudformation.Context block found.; Topic0221: No Metadata.com.aws.cloudformation.Context block found.; Topic0222: No Metadata.com.aws.cloudformation.Context block found.; Topic0223: No Metadata.com.aws.cloudformation.Context block found.; Topic0224: No Metadata.com.aws.cloudformation.Context block found.; Topic0225: No Metadata.com.aws.cloudformation.Context block found.; Topic0226: No Metadata.com.aws.cloudformation.Context block found.; Topic0227: No Metadata.com.aws.cloudformation.Context block found.; Topic0228: No Metadata.com.aws.cloudformation.Context block found.; Topic0229: No Metadata.com.aws.cloudformation.Context block found.; Topic0230: No Metadata.com.aws.cloudformation.Context block found.; Topic0231: No Metadata.com.aws.cloudformation.Context block found.; Topic0232: No Metadata.com.aws.cloudformation.Context block found.; Topic0233: No Metadata.com.aws.cloudformation.Context block found.; Topic0234: No Metadata.com.aws.cloudformation.Context block found.; Topic0235: No Metadata.com.aws.cloudformation.Context block found.; Topic0236: No Metadata.com.aws.cloudformation.Context block found.; Topic0237: No Metadata.com.aws.cloudformation.Context block found.; Topic0238: No Metadata.com.aws.cloudformation.Context block found.; Topic0239: No Metadata.com.aws.cloudformation.Context block found.; Topic0240: No Metadata.com.aws.cloudformation.Context block found.; Topic0241: No Metadata.com.aws.cloudformation.Context block found.; Topic0242: No Metadata.com.aws.cloudformation.Context block found.; Topic0243: No Metadata.com.aws.cloudformation.Context block found.; Topic0244: No Metadata.com.aws.cloudformation.Context block found.; Topic0245: No Metadata.com.aws.cloudformation.Context block found.; Topic0246: No Metadata.com.aws.cloudformation.Context block found.; Topic0247: No Metadata.com.aws.cloudformation.Context block found.; Topic0248: No Metadata.com.aws.cloudformation.Context block found.; Topic0249: No Metadata.com.aws.cloudformation.Context block found.; Topic0250: No Metadata.com.aws.cloudformation.Context block found.; Topic0251: No Metadata.com.aws.cloudformation.Context block found.; Topic0252: No Metadata.com.aws.cloudformation.Context block found.; Topic0253: No Metadata.com.aws.cloudformation.Context block found.; Topic0254: No Metadata.com.aws.cloudformation.Context block found.; Topic0255: No Metadata.com.aws.cloudformation.Context block found.; Topic0256: No Metadata.com.aws.cloudformation.Context block found.; Topic0257: No Metadata.com.aws.cloudformation.Context block found.; Topic0258: No Metadata.com.aws.cloudformation.Context block found.; Topic0259: No Metadata.com.aws.cloudformation.Context block found.; Topic0260: No Metadata.com.aws.cloudformation.Context block found.; Topic0261: No Metadata.com.aws.cloudformation.Context block found.; Topic0262: No Metadata.com.aws.cloudformation.Context block found.; Topic0263: No Metadata.com.aws.cloudformation.Context block found.; Topic0264: No Metadata.com.aws.cloudformation.Context block found.; Topic0265: No Metadata.com.aws.cloudformation.Context block found.; Topic0266: No Metadata.com.aws.cloudformation.Context block found.; Topic0267: No Metadata.com.aws.cloudformation.Context block found.; Topic0268: No Metadata.com.aws.cloudformation.Context block found.; Topic0269: No Metadata.com.aws.cloudformation.Context block found.; Topic0270: No Metadata.com.aws.cloudformation.Context block found.; Topic0271: No Metadata.com.aws.cloudformation.Context block found.; Topic0272: No Metadata.com.aws.cloudformation.Context block found.; Topic0273: No Metadata.com.aws.cloudformation.Context block found.; Topic0274: No Metadata.com.aws.cloudformation.Context block found.; Topic0275: No Metadata.com.aws.cloudformation.Context block found.; Topic0276: No Metadata.com.aws.cloudformation.Context block found.; Topic0277: No Metadata.com.aws.cloudformation.Context block found.; Topic0278: No Metadata.com.aws.cloudformation.Context block found.; Topic0279: No Metadata.com.aws.cloudformation.Context block found.; Topic0280: No Metadata.com.aws.cloudformation.Context block found.; Topic0281: No Metadata.com.aws.cloudformation.Context block found.; Topic0282: No Metadata.com.aws.cloudformation.Context block found.; Topic0283: No Metadata.com.aws.cloudformation.Context block found.; Topic0284: No Metadata.com.aws.cloudformation.Context block found.; Topic0285: No Metadata.com.aws.cloudformation.Context block found.; Topic0286: No Metadata.com.aws.cloudformation.Context block found.; Topic0287: No Metadata.com.aws.cloudformation.Context block found.; Topic0288: No Metadata.com.aws.cloudformation.Context block found.; Topic0289: No Metadata.com.aws.cloudformation.Context block found.; Topic0290: No Metadata.com.aws.cloudformation.Context block found.; Topic0291: No Metadata.com.aws.cloudformation.Context block found.; Topic0292: No Metadata.com.aws.cloudformation.Context block found.; Topic0293: No Metadata.com.aws.cloudformation.Context block found.; Topic0294: No Metadata.com.aws.cloudformation.Context block found.; Topic0295: No Metadata.com.aws.cloudformation.Context block found.; Topic0296: No Metadata.com.aws.cloudformation.Context block found.; Topic0297: No Metadata.com.aws.cloudformation.Context block found.; Topic0298: No Metadata.com.aws.cloudformation.Context block found.; Topic0299: No Metadata.com.aws.cloudformation.Context block found.; Topic0300: No Metadata.com.aws.cloudformation.Context block found.; Topic0301: No Metadata.com.aws.cloudformation.Context block found.; Topic0302: No Metadata.com.aws.cloudformation.Context block found.; Topic0303: No Metadata.com.aws.cloudformation.Context block found.; Topic0304: No Metadata.com.aws.cloudformation.Context block found.; Topic0305: No Metadata.com.aws.cloudformation.Context block found.; Topic0306: No Metadata.com.aws.cloudformation.Context block found.; Topic0307: No Metadata.com.aws.cloudformation.Context block found.; Topic0308: No Metadata.com.aws.cloudformation.Context block found.; Topic0309: No Metadata.com.aws.cloudformation.Context block found.; Topic0310: No Metadata.com.aws.cloudformation.Context block found.; Topic0311: No Metadata.com.aws.cloudformation.Context block found.; Topic0312: No Metadata.com.aws.cloudformation.Context block found.; Topic0313: No Metadata.com.aws.cloudformation.Context block found.; Topic0314: No Metadata.com.aws.cloudformation.Context block found.; Topic0315: No Metadata.com.aws.cloudformation.Context block found.; Topic0316: No Metadata.com.aws.cloudformation.Context block found.; Topic0317: No Metadata.com.aws.cloudformation.Context block found.; Topic0318: No Metadata.com.aws.cloudformation.Context block found.; Topic0319: No Metadata.com.aws.cloudformation.Context block found.; Topic0320: No Metadata.com.aws.cloudformation.Context block found.; Topic0321: No Metadata.com.aws.cloudformation.Context block found.; Topic0322: No Metadata.com.aws.cloudformation.Context block found.; Topic0323: No Metadata.com.aws.cloudformation.Context block found.; Topic0324: No Metadata.com.aws.cloudformation.Context block found.; Topic0325: No Metadata.com.aws.cloudformation.Context block found.; Topic0326: No Metadata.com.aws.cloudformation.Context block found.; Topic0327: No Metadata.com.aws.cloudformation.Context block found.; Topic0328: No Metadata.com.aws.cloudformation.Context block found.; Topic0329: No Metadata.com.aws.cloudformation.Context block found.; Topic0330: No Metadata.com.aws.cloudformation.Context block found.; Topic0331: No Metadata.com.aws.cloudformation.Context block found.; Topic0332: No Metadata.com.aws.cloudformation.Context block found.; Topic0333: No Metadata.com.aws.cloudformation.Context block found.; Topic0334: No Metadata.com.aws.cloudformation.Context block found.; Topic0335: No Metadata.com.aws.cloudformation.Context block found.; Topic0336: No Metadata.com.aws.cloudformation.Context block found.; Topic0337: No Metadata.com.aws.cloudformation.Context block found.; Topic0338: No Metadata.com.aws.cloudformation.Context block found.; Topic0339: No Metadata.com.aws.cloudformation.Context block found.; Topic0340: No Metadata.com.aws.cloudformation.Context block found.; Topic0341: No Metadata.com.aws.cloudformation.Context block found.; Topic0342: No Metadata.com.aws.cloudformation.Context block found.; Topic0343: No Metadata.com.aws.cloudformation.Context block found.; Topic0344: No Metadata.com.aws.cloudformation.Context block found.; Topic0345: No Metadata.com.aws.cloudformation.Context block found.; Topic0346: No Metadata.com.aws.cloudformation.Context block found.; Topic0347: No Metadata.com.aws.cloudformation.Context block found.; Topic0348: No Metadata.com.aws.cloudformation.Context block found.; Topic0349: No Metadata.com.aws.cloudformation.Context block found.; Topic0350: No Metadata.com.aws.cloudformation.Context block found.; Topic0351: No Metadata.com.aws.cloudformation.Context block found.; Topic0352: No Metadata.com.aws.cloudformation.Context block found.; Topic0353: No Metadata.com.aws.cloudformation.Context block found.; Topic0354: No Metadata.com.aws.cloudformation.Context block found.; Topic0355: No Metadata.com.aws.cloudformation.Context block found.; Topic0356: No Metadata.com.aws.cloudformation.Context block found.; Topic0357: No Metadata.com.aws.cloudformation.Context block found.; Topic0358: No Metadata.com.aws.cloudformation.Context block found.; Topic0359: No Metadata.com.aws.cloudformation.Context block found.; Topic0360: No Metadata.com.aws.cloudformation.Context block found.; Topic0361: No Metadata.com.aws.cloudformation.Context block found.; Topic0362: No Metadata.com.aws.cloudformation.Context block found.; Topic0363: No Metadata.com.aws.cloudformation.Context block found.; Topic0364: No Metadata.com.aws.cloudformation.Context block found.; Topic0365: No Metadata.com.aws.cloudformation.Context block found.; Topic0366: No Metadata.com.aws.cloudformation.Context block found.; Topic0367: No Metadata.com.aws.cloudformation.Context block found.; Topic0368: No Metadata.com.aws.cloudformation.Context block found.; Topic0369: No Metadata.com.aws.cloudformation.Context block found.; Topic0370: No Metadata.com.aws.cloudformation.Context block found.; Topic0371: No Metadata.com.aws.cloudformation.Context block found.; Topic0372: No Metadata.com.aws.cloudformation.Context block found.; Topic0373: No Metadata.com.aws.cloudformation.Context block found.; Topic0374: No Metadata.com.aws.cloudformation.Context block found.; Topic0375: No Metadata.com.aws.cloudformation.Context block found.; Topic0376: No Metadata.com.aws.cloudformation.Context block found.; Topic0377: No Metadata.com.aws.cloudformation.Context block found.; Topic0378: No Metadata.com.aws.cloudformation.Context block found.; Topic0379: No Metadata.com.aws.cloudformation.Context block found.; Topic0380: No Metadata.com.aws.cloudformation.Context block found.; Topic0381: No Metadata.com.aws.cloudformation.Context block found.; Topic0382: No Metadata.com.aws.cloudformation.Context block found.; Topic0383: No Metadata.com.aws.cloudformation.Context block found.; Topic0384: No Metadata.com.aws.cloudformation.Context block found.; Topic0385: No Metadata.com.aws.cloudformation.Context block found.; Topic0386: No Metadata.com.aws.cloudformation.Context block found.; Topic0387: No Metadata.com.aws.cloudformation.Context block found.; Topic0388: No Metadata.com.aws.cloudformation.Context block found.; Topic0389: No Metadata.com.aws.cloudformation.Context block found.; Topic0390: No Metadata.com.aws.cloudformation.Context block found.; Topic0391: No Metadata.com.aws.cloudformation.Context block found.; Topic0392: No Metadata.com.aws.cloudformation.Context block found.; Topic0393: No Metadata.com.aws.cloudformation.Context block found.; Topic0394: No Metadata.com.aws.cloudformation.Context block found.; Topic0395: No Metadata.com.aws.cloudformation.Context block found.; Topic0396: No Metadata.com.aws.cloudformation.Context block found.; Topic0397: No Metadata.com.aws.cloudformation.Context block found.; Topic0398: No Metadata.com.aws.cloudformation.Context block found.; Topic0399: No Metadata.com.aws.cloudformation.Context block found.; Topic0400: No Metadata.com.aws.cloudformation.Context block found.; Topic0401: No Metadata.com.aws.cloudformation.Context block found.; Topic0402: No Metadata.com.aws.cloudformation.Context block found.; Topic0403: No Metadata.com.aws.cloudformation.Context block found.; Topic0404: No Metadata.com.aws.cloudformation.Context block found.; Topic0405: No Metadata.com.aws.cloudformation.Context block found.; Topic0406: No Metadata.com.aws.cloudformation.Context block found.; Topic0407: No Metadata.com.aws.cloudformation.Context block found.; Topic0408: No Metadata.com.aws.cloudformation.Context block found.; Topic0409: No Metadata.com.aws.cloudformation.Context block found.; Topic0410: No Metadata.com.aws.cloudformation.Context block found.; Topic0411: No Metadata.com.aws.cloudformation.Context block found.; Topic0412: No Metadata.com.aws.cloudformation.Context block found.; Topic0413: No Metadata.com.aws.cloudformation.Context block found.; Topic0414: No Metadata.com.aws.cloudformation.Context block found.; Topic0415: No Metadata.com.aws.cloudformation.Context block found.; Topic0416: No Metadata.com.aws.cloudformation.Context block found.; Topic0417: No Metadata.com.aws.cloudformation.Context block found.; Topic0418: No Metadata.com.aws.cloudformation.Context block found.; Topic0419: No Metadata.com.aws.cloudformation.Context block found.; Topic0420: No Metadata.com.aws.cloudformation.Context block found.; Topic0421: No Metadata.com.aws.cloudformation.Context block found.; Topic0422: No Metadata.com.aws.cloudformation.Context block found.; Topic0423: No Metadata.com.aws.cloudformation.Context block found.; Topic0424: No Metadata.com.aws.cloudformation.Context block found.; Topic0425: No Metadata.com.aws.cloudformation.Context block found.; Topic0426: No Metadata.com.aws.cloudformation.Context block found.; Topic0427: No Metadata.com.aws.cloudformation.Context block found.; Topic0428: No Metadata.com.aws.cloudformation.Context block found.; Topic0429: No Metadata.com.aws.cloudformation.Context block found.; Topic0430: No Metadata.com.aws.cloudformation.Context block found.; Topic0431: No Metadata.com.aws.cloudformation.Context block found.; Topic0432: No Metadata.com.aws.cloudformation.Context block found.; Topic0433: No Metadata.com.aws.cloudformation.Context block found.; Topic0434: No Metadata.com.aws.cloudformation.Context block found.; Topic0435: No Metadata.com.aws.cloudformation.Context block found.; Topic0436: No Metadata.com.aws.cloudformation.Context block found.; Topic0437: No Metadata.com.aws.cloudformation.Context block found.; Topic0438: No Metadata.com.aws.cloudformation.Context block found.; Topic0439: No Metadata.com.aws.cloudformation.Context block found.; Topic0440: No Metadata.com.aws.cloudformation.Context block found.; Topic0441: No Metadata.com.aws.cloudformation.Context block found.; Topic0442: No Metadata.com.aws.cloudformation.Context block found.; Topic0443: No Metadata.com.aws.cloudformation.Context block found.; Topic0444: No Metadata.com.aws.cloudformation.Context block found.; Topic0445: No Metadata.com.aws.cloudformation.Context block found.; Topic0446: No Metadata.com.aws.cloudformation.Context block found.; Topic0447: No Metadata.com.aws.cloudformation.Context block found.; Topic0448: No Metadata.com.aws.cloudformation.Context block found.; Topic0449: No Metadata.com.aws.cloudformation.Context block found.; Topic0450: No Metadata.com.aws.cloudformation.Context block found.; Topic0451: No Metadata.com.aws.cloudformation.Context block found.; Topic0452: No Metadata.com.aws.cloudformation.Context block found.; Topic0453: No Metadata.com.aws.cloudformation.Context block found.; Topic0454: No Metadata.com.aws.cloudformation.Context block found.; Topic0455: No Metadata.com.aws.cloudformation.Context block found.; Topic0456: No Metadata.com.aws.cloudformation.Context block found.; Topic0457: No Metadata.com.aws.cloudformation.Context block found.; Topic0458: No Metadata.com.aws.cloudformation.Context block found.; Topic0459: No Metadata.com.aws.cloudformation.Context block found.; Topic0460: No Metadata.com.aws.cloudformation.Context block found.; Topic0461: No Metadata.com.aws.cloudformation.Context block found.; Topic0462: No Metadata.com.aws.cloudformation.Context block found.; Topic0463: No Metadata.com.aws.cloudformation.Context block found.; Topic0464: No Metadata.com.aws.cloudformation.Context block found.; Topic0465: No Metadata.com.aws.cloudformation.Context block found.; Topic0466: No Metadata.com.aws.cloudformation.Context block found.; Topic0467: No Metadata.com.aws.cloudformation.Context block found.; Topic0468: No Metadata.com.aws.cloudformation.Context block found.; Topic0469: No Metadata.com.aws.cloudformation.Context block found.; Topic0470: No Metadata.com.aws.cloudformation.Context block found.; Topic0471: No Metadata.com.aws.cloudformation.Context block found.; Topic0472: No Metadata.com.aws.cloudformation.Context block found.; Topic0473: No Metadata.com.aws.cloudformation.Context block found.; Topic0474: No Metadata.com.aws.cloudformation.Context block found.; Topic0475: No Metadata.com.aws.cloudformation.Context block found.; Topic0476: No Metadata.com.aws.cloudformation.Context block found.; Topic0477: No Metadata.com.aws.cloudformation.Context block found.; Topic0478: No Metadata.com.aws.cloudformation.Context block found.; Topic0479: No Metadata.com.aws.cloudformation.Context block found.; Topic0480: No Metadata.com.aws.cloudformation.Context block found.; Topic0481: No Metadata.com.aws.cloudformation.Context block found.; Topic0482: No Metadata.com.aws.cloudformation.Context block found.; Topic0483: No Metadata.com.aws.cloudformation.Context block found.; Topic0484: No Metadata.com.aws.cloudformation.Context block found.; Topic0485: No Metadata.com.aws.cloudformation.Context block found.; Topic0486: No Metadata.com.aws.cloudformation.Context block found.; Topic0487: No Metadata.com.aws.cloudformation.Context block found.; Topic0488: No Metadata.com.aws.cloudformation.Context block found.; Topic0489: No Metadata.com.aws.cloudformation.Context block found.; Topic0490: No Metadata.com.aws.cloudformation.Context block found.; Topic0491: No Metadata.com.aws.cloudformation.Context block found.; Topic0492: No Metadata.com.aws.cloudformation.Context block found.; Topic0493: No Metadata.com.aws.cloudformation.Context block found.; Topic0494: No Metadata.com.aws.cloudformation.Context block found.; Topic0495: No Metadata.com.aws.cloudformation.Context block found.; Topic0496: No Metadata.com.aws.cloudformation.Context block found.; Topic0497: No Metadata.com.aws.cloudformation.Context block found.; Topic0498: No Metadata.com.aws.cloudformation.Context block found.; Topic0499: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "Topic0000", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 6, + "startColumn": 3, + "endLine": 6, + "endColumn": 12, + "relatedResources": [ + { + "resource": { + "id": "Topic0001", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 8, + "startColumn": 3, + "endLine": 8, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0002", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 10, + "startColumn": 3, + "endLine": 10, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0003", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 12, + "startColumn": 3, + "endLine": 12, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0004", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 14, + "startColumn": 3, + "endLine": 14, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0005", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 16, + "startColumn": 3, + "endLine": 16, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0006", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 18, + "startColumn": 3, + "endLine": 18, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0007", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 20, + "startColumn": 3, + "endLine": 20, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0008", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 22, + "startColumn": 3, + "endLine": 22, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0009", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 24, + "startColumn": 3, + "endLine": 24, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0010", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 26, + "startColumn": 3, + "endLine": 26, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0011", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 28, + "startColumn": 3, + "endLine": 28, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0012", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 30, + "startColumn": 3, + "endLine": 30, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0013", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 32, + "startColumn": 3, + "endLine": 32, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0014", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 34, + "startColumn": 3, + "endLine": 34, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0015", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 36, + "startColumn": 3, + "endLine": 36, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0016", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 38, + "startColumn": 3, + "endLine": 38, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0017", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 40, + "startColumn": 3, + "endLine": 40, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0018", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 42, + "startColumn": 3, + "endLine": 42, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0019", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 44, + "startColumn": 3, + "endLine": 44, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0020", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 46, + "startColumn": 3, + "endLine": 46, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0021", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 48, + "startColumn": 3, + "endLine": 48, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0022", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 50, + "startColumn": 3, + "endLine": 50, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0023", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 52, + "startColumn": 3, + "endLine": 52, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0024", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 54, + "startColumn": 3, + "endLine": 54, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0025", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 56, + "startColumn": 3, + "endLine": 56, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0026", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 58, + "startColumn": 3, + "endLine": 58, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0027", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 60, + "startColumn": 3, + "endLine": 60, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0028", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 62, + "startColumn": 3, + "endLine": 62, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0029", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 64, + "startColumn": 3, + "endLine": 64, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0030", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 66, + "startColumn": 3, + "endLine": 66, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0031", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 68, + "startColumn": 3, + "endLine": 68, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0032", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 70, + "startColumn": 3, + "endLine": 70, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0033", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 72, + "startColumn": 3, + "endLine": 72, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0034", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 74, + "startColumn": 3, + "endLine": 74, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0035", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 76, + "startColumn": 3, + "endLine": 76, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0036", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 78, + "startColumn": 3, + "endLine": 78, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0037", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 80, + "startColumn": 3, + "endLine": 80, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0038", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 82, + "startColumn": 3, + "endLine": 82, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0039", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 84, + "startColumn": 3, + "endLine": 84, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0040", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 86, + "startColumn": 3, + "endLine": 86, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0041", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 88, + "startColumn": 3, + "endLine": 88, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0042", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 90, + "startColumn": 3, + "endLine": 90, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0043", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 92, + "startColumn": 3, + "endLine": 92, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0044", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 94, + "startColumn": 3, + "endLine": 94, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0045", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 96, + "startColumn": 3, + "endLine": 96, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0046", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 98, + "startColumn": 3, + "endLine": 98, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0047", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 100, + "startColumn": 3, + "endLine": 100, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0048", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 102, + "startColumn": 3, + "endLine": 102, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0049", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 104, + "startColumn": 3, + "endLine": 104, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0050", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 106, + "startColumn": 3, + "endLine": 106, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0051", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 108, + "startColumn": 3, + "endLine": 108, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0052", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 110, + "startColumn": 3, + "endLine": 110, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0053", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 112, + "startColumn": 3, + "endLine": 112, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0054", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 114, + "startColumn": 3, + "endLine": 114, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0055", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 116, + "startColumn": 3, + "endLine": 116, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0056", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 118, + "startColumn": 3, + "endLine": 118, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0057", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 120, + "startColumn": 3, + "endLine": 120, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0058", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 122, + "startColumn": 3, + "endLine": 122, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0059", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 124, + "startColumn": 3, + "endLine": 124, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0060", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 126, + "startColumn": 3, + "endLine": 126, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0061", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 128, + "startColumn": 3, + "endLine": 128, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0062", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 130, + "startColumn": 3, + "endLine": 130, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0063", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 132, + "startColumn": 3, + "endLine": 132, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0064", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 134, + "startColumn": 3, + "endLine": 134, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0065", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 136, + "startColumn": 3, + "endLine": 136, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0066", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 138, + "startColumn": 3, + "endLine": 138, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0067", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 140, + "startColumn": 3, + "endLine": 140, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0068", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 142, + "startColumn": 3, + "endLine": 142, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0069", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 144, + "startColumn": 3, + "endLine": 144, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0070", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 146, + "startColumn": 3, + "endLine": 146, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0071", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 148, + "startColumn": 3, + "endLine": 148, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0072", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 150, + "startColumn": 3, + "endLine": 150, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0073", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 152, + "startColumn": 3, + "endLine": 152, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0074", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 154, + "startColumn": 3, + "endLine": 154, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0075", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 156, + "startColumn": 3, + "endLine": 156, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0076", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 158, + "startColumn": 3, + "endLine": 158, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0077", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 160, + "startColumn": 3, + "endLine": 160, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0078", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 162, + "startColumn": 3, + "endLine": 162, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0079", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 164, + "startColumn": 3, + "endLine": 164, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0080", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 166, + "startColumn": 3, + "endLine": 166, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0081", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 168, + "startColumn": 3, + "endLine": 168, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0082", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 170, + "startColumn": 3, + "endLine": 170, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0083", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 172, + "startColumn": 3, + "endLine": 172, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0084", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 174, + "startColumn": 3, + "endLine": 174, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0085", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 176, + "startColumn": 3, + "endLine": 176, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0086", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 178, + "startColumn": 3, + "endLine": 178, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0087", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 180, + "startColumn": 3, + "endLine": 180, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0088", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 182, + "startColumn": 3, + "endLine": 182, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0089", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 184, + "startColumn": 3, + "endLine": 184, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0090", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 186, + "startColumn": 3, + "endLine": 186, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0091", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 188, + "startColumn": 3, + "endLine": 188, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0092", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 190, + "startColumn": 3, + "endLine": 190, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0093", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 192, + "startColumn": 3, + "endLine": 192, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0094", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 194, + "startColumn": 3, + "endLine": 194, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0095", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 196, + "startColumn": 3, + "endLine": 196, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0096", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 198, + "startColumn": 3, + "endLine": 198, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0097", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 200, + "startColumn": 3, + "endLine": 200, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0098", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 202, + "startColumn": 3, + "endLine": 202, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0099", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 204, + "startColumn": 3, + "endLine": 204, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0100", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 206, + "startColumn": 3, + "endLine": 206, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0101", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 208, + "startColumn": 3, + "endLine": 208, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0102", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 210, + "startColumn": 3, + "endLine": 210, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0103", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 212, + "startColumn": 3, + "endLine": 212, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0104", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0105", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 216, + "startColumn": 3, + "endLine": 216, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0106", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 218, + "startColumn": 3, + "endLine": 218, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0107", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 220, + "startColumn": 3, + "endLine": 220, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0108", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 222, + "startColumn": 3, + "endLine": 222, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0109", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 224, + "startColumn": 3, + "endLine": 224, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0110", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 226, + "startColumn": 3, + "endLine": 226, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0111", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 228, + "startColumn": 3, + "endLine": 228, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0112", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 230, + "startColumn": 3, + "endLine": 230, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0113", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 232, + "startColumn": 3, + "endLine": 232, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0114", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 234, + "startColumn": 3, + "endLine": 234, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0115", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 236, + "startColumn": 3, + "endLine": 236, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0116", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 238, + "startColumn": 3, + "endLine": 238, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0117", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 240, + "startColumn": 3, + "endLine": 240, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0118", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 242, + "startColumn": 3, + "endLine": 242, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0119", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 244, + "startColumn": 3, + "endLine": 244, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0120", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 246, + "startColumn": 3, + "endLine": 246, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0121", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 248, + "startColumn": 3, + "endLine": 248, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0122", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 250, + "startColumn": 3, + "endLine": 250, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0123", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 252, + "startColumn": 3, + "endLine": 252, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0124", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 254, + "startColumn": 3, + "endLine": 254, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0125", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 256, + "startColumn": 3, + "endLine": 256, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0126", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 258, + "startColumn": 3, + "endLine": 258, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0127", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 260, + "startColumn": 3, + "endLine": 260, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0128", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 262, + "startColumn": 3, + "endLine": 262, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0129", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 264, + "startColumn": 3, + "endLine": 264, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0130", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 266, + "startColumn": 3, + "endLine": 266, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0131", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 268, + "startColumn": 3, + "endLine": 268, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0132", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 270, + "startColumn": 3, + "endLine": 270, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0133", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 272, + "startColumn": 3, + "endLine": 272, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0134", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 274, + "startColumn": 3, + "endLine": 274, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0135", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 276, + "startColumn": 3, + "endLine": 276, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0136", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 278, + "startColumn": 3, + "endLine": 278, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0137", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 280, + "startColumn": 3, + "endLine": 280, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0138", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 282, + "startColumn": 3, + "endLine": 282, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0139", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 284, + "startColumn": 3, + "endLine": 284, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0140", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 286, + "startColumn": 3, + "endLine": 286, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0141", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 288, + "startColumn": 3, + "endLine": 288, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0142", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 290, + "startColumn": 3, + "endLine": 290, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0143", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 292, + "startColumn": 3, + "endLine": 292, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0144", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 294, + "startColumn": 3, + "endLine": 294, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0145", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 296, + "startColumn": 3, + "endLine": 296, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0146", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 298, + "startColumn": 3, + "endLine": 298, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0147", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 300, + "startColumn": 3, + "endLine": 300, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0148", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 302, + "startColumn": 3, + "endLine": 302, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0149", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 304, + "startColumn": 3, + "endLine": 304, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0150", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 306, + "startColumn": 3, + "endLine": 306, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0151", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 308, + "startColumn": 3, + "endLine": 308, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0152", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 310, + "startColumn": 3, + "endLine": 310, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0153", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 312, + "startColumn": 3, + "endLine": 312, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0154", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 314, + "startColumn": 3, + "endLine": 314, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0155", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 316, + "startColumn": 3, + "endLine": 316, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0156", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 318, + "startColumn": 3, + "endLine": 318, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0157", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 320, + "startColumn": 3, + "endLine": 320, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0158", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 322, + "startColumn": 3, + "endLine": 322, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0159", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 324, + "startColumn": 3, + "endLine": 324, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0160", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 326, + "startColumn": 3, + "endLine": 326, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0161", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 328, + "startColumn": 3, + "endLine": 328, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0162", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 330, + "startColumn": 3, + "endLine": 330, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0163", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 332, + "startColumn": 3, + "endLine": 332, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0164", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 334, + "startColumn": 3, + "endLine": 334, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0165", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 336, + "startColumn": 3, + "endLine": 336, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0166", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 338, + "startColumn": 3, + "endLine": 338, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0167", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 340, + "startColumn": 3, + "endLine": 340, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0168", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 342, + "startColumn": 3, + "endLine": 342, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0169", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 344, + "startColumn": 3, + "endLine": 344, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0170", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 346, + "startColumn": 3, + "endLine": 346, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0171", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 348, + "startColumn": 3, + "endLine": 348, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0172", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 350, + "startColumn": 3, + "endLine": 350, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0173", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 352, + "startColumn": 3, + "endLine": 352, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0174", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 354, + "startColumn": 3, + "endLine": 354, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0175", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 356, + "startColumn": 3, + "endLine": 356, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0176", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 358, + "startColumn": 3, + "endLine": 358, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0177", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 360, + "startColumn": 3, + "endLine": 360, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0178", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 362, + "startColumn": 3, + "endLine": 362, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0179", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 364, + "startColumn": 3, + "endLine": 364, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0180", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 366, + "startColumn": 3, + "endLine": 366, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0181", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 368, + "startColumn": 3, + "endLine": 368, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0182", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 370, + "startColumn": 3, + "endLine": 370, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0183", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 372, + "startColumn": 3, + "endLine": 372, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0184", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 374, + "startColumn": 3, + "endLine": 374, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0185", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 376, + "startColumn": 3, + "endLine": 376, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0186", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 378, + "startColumn": 3, + "endLine": 378, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0187", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 380, + "startColumn": 3, + "endLine": 380, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0188", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 382, + "startColumn": 3, + "endLine": 382, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0189", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 384, + "startColumn": 3, + "endLine": 384, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0190", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 386, + "startColumn": 3, + "endLine": 386, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0191", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 388, + "startColumn": 3, + "endLine": 388, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0192", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 390, + "startColumn": 3, + "endLine": 390, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0193", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 392, + "startColumn": 3, + "endLine": 392, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0194", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 394, + "startColumn": 3, + "endLine": 394, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0195", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 396, + "startColumn": 3, + "endLine": 396, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0196", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 398, + "startColumn": 3, + "endLine": 398, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0197", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 400, + "startColumn": 3, + "endLine": 400, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0198", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 402, + "startColumn": 3, + "endLine": 402, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0199", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 404, + "startColumn": 3, + "endLine": 404, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0200", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 406, + "startColumn": 3, + "endLine": 406, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0201", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 408, + "startColumn": 3, + "endLine": 408, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0202", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 410, + "startColumn": 3, + "endLine": 410, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0203", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 412, + "startColumn": 3, + "endLine": 412, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0204", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 414, + "startColumn": 3, + "endLine": 414, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0205", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 416, + "startColumn": 3, + "endLine": 416, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0206", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 418, + "startColumn": 3, + "endLine": 418, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0207", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 420, + "startColumn": 3, + "endLine": 420, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0208", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 422, + "startColumn": 3, + "endLine": 422, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0209", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 424, + "startColumn": 3, + "endLine": 424, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0210", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 426, + "startColumn": 3, + "endLine": 426, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0211", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 428, + "startColumn": 3, + "endLine": 428, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0212", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 430, + "startColumn": 3, + "endLine": 430, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0213", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 432, + "startColumn": 3, + "endLine": 432, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0214", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 434, + "startColumn": 3, + "endLine": 434, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0215", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 436, + "startColumn": 3, + "endLine": 436, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0216", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 438, + "startColumn": 3, + "endLine": 438, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0217", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 440, + "startColumn": 3, + "endLine": 440, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0218", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 442, + "startColumn": 3, + "endLine": 442, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0219", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 444, + "startColumn": 3, + "endLine": 444, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0220", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 446, + "startColumn": 3, + "endLine": 446, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0221", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 448, + "startColumn": 3, + "endLine": 448, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0222", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 450, + "startColumn": 3, + "endLine": 450, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0223", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 452, + "startColumn": 3, + "endLine": 452, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0224", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 454, + "startColumn": 3, + "endLine": 454, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0225", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 456, + "startColumn": 3, + "endLine": 456, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0226", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 458, + "startColumn": 3, + "endLine": 458, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0227", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 460, + "startColumn": 3, + "endLine": 460, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0228", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 462, + "startColumn": 3, + "endLine": 462, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0229", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 464, + "startColumn": 3, + "endLine": 464, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0230", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 466, + "startColumn": 3, + "endLine": 466, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0231", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 468, + "startColumn": 3, + "endLine": 468, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0232", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 470, + "startColumn": 3, + "endLine": 470, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0233", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 472, + "startColumn": 3, + "endLine": 472, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0234", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 474, + "startColumn": 3, + "endLine": 474, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0235", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 476, + "startColumn": 3, + "endLine": 476, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0236", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 478, + "startColumn": 3, + "endLine": 478, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0237", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 480, + "startColumn": 3, + "endLine": 480, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0238", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 482, + "startColumn": 3, + "endLine": 482, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0239", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 484, + "startColumn": 3, + "endLine": 484, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0240", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 486, + "startColumn": 3, + "endLine": 486, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0241", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 488, + "startColumn": 3, + "endLine": 488, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0242", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 490, + "startColumn": 3, + "endLine": 490, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0243", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 492, + "startColumn": 3, + "endLine": 492, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0244", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 494, + "startColumn": 3, + "endLine": 494, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0245", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 496, + "startColumn": 3, + "endLine": 496, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0246", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 498, + "startColumn": 3, + "endLine": 498, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0247", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 500, + "startColumn": 3, + "endLine": 500, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0248", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 502, + "startColumn": 3, + "endLine": 502, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0249", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 504, + "startColumn": 3, + "endLine": 504, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0250", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 506, + "startColumn": 3, + "endLine": 506, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0251", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 508, + "startColumn": 3, + "endLine": 508, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0252", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 510, + "startColumn": 3, + "endLine": 510, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0253", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 512, + "startColumn": 3, + "endLine": 512, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0254", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 514, + "startColumn": 3, + "endLine": 514, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0255", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 516, + "startColumn": 3, + "endLine": 516, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0256", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 518, + "startColumn": 3, + "endLine": 518, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0257", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 520, + "startColumn": 3, + "endLine": 520, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0258", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 522, + "startColumn": 3, + "endLine": 522, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0259", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 524, + "startColumn": 3, + "endLine": 524, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0260", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 526, + "startColumn": 3, + "endLine": 526, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0261", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 528, + "startColumn": 3, + "endLine": 528, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0262", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 530, + "startColumn": 3, + "endLine": 530, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0263", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 532, + "startColumn": 3, + "endLine": 532, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0264", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 534, + "startColumn": 3, + "endLine": 534, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0265", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 536, + "startColumn": 3, + "endLine": 536, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0266", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 538, + "startColumn": 3, + "endLine": 538, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0267", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 540, + "startColumn": 3, + "endLine": 540, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0268", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 542, + "startColumn": 3, + "endLine": 542, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0269", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 544, + "startColumn": 3, + "endLine": 544, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0270", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 546, + "startColumn": 3, + "endLine": 546, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0271", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 548, + "startColumn": 3, + "endLine": 548, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0272", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 550, + "startColumn": 3, + "endLine": 550, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0273", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 552, + "startColumn": 3, + "endLine": 552, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0274", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 554, + "startColumn": 3, + "endLine": 554, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0275", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 556, + "startColumn": 3, + "endLine": 556, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0276", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 558, + "startColumn": 3, + "endLine": 558, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0277", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 560, + "startColumn": 3, + "endLine": 560, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0278", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 562, + "startColumn": 3, + "endLine": 562, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0279", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 564, + "startColumn": 3, + "endLine": 564, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0280", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 566, + "startColumn": 3, + "endLine": 566, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0281", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 568, + "startColumn": 3, + "endLine": 568, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0282", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 570, + "startColumn": 3, + "endLine": 570, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0283", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 572, + "startColumn": 3, + "endLine": 572, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0284", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 574, + "startColumn": 3, + "endLine": 574, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0285", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 576, + "startColumn": 3, + "endLine": 576, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0286", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 578, + "startColumn": 3, + "endLine": 578, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0287", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 580, + "startColumn": 3, + "endLine": 580, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0288", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 582, + "startColumn": 3, + "endLine": 582, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0289", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 584, + "startColumn": 3, + "endLine": 584, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0290", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 586, + "startColumn": 3, + "endLine": 586, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0291", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 588, + "startColumn": 3, + "endLine": 588, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0292", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 590, + "startColumn": 3, + "endLine": 590, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0293", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 592, + "startColumn": 3, + "endLine": 592, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0294", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 594, + "startColumn": 3, + "endLine": 594, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0295", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 596, + "startColumn": 3, + "endLine": 596, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0296", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 598, + "startColumn": 3, + "endLine": 598, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0297", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 600, + "startColumn": 3, + "endLine": 600, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0298", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 602, + "startColumn": 3, + "endLine": 602, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0299", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 604, + "startColumn": 3, + "endLine": 604, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0300", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 606, + "startColumn": 3, + "endLine": 606, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0301", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 608, + "startColumn": 3, + "endLine": 608, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0302", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 610, + "startColumn": 3, + "endLine": 610, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0303", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 612, + "startColumn": 3, + "endLine": 612, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0304", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 614, + "startColumn": 3, + "endLine": 614, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0305", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 616, + "startColumn": 3, + "endLine": 616, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0306", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 618, + "startColumn": 3, + "endLine": 618, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0307", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 620, + "startColumn": 3, + "endLine": 620, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0308", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 622, + "startColumn": 3, + "endLine": 622, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0309", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 624, + "startColumn": 3, + "endLine": 624, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0310", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 626, + "startColumn": 3, + "endLine": 626, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0311", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 628, + "startColumn": 3, + "endLine": 628, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0312", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 630, + "startColumn": 3, + "endLine": 630, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0313", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 632, + "startColumn": 3, + "endLine": 632, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0314", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 634, + "startColumn": 3, + "endLine": 634, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0315", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 636, + "startColumn": 3, + "endLine": 636, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0316", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 638, + "startColumn": 3, + "endLine": 638, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0317", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 640, + "startColumn": 3, + "endLine": 640, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0318", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 642, + "startColumn": 3, + "endLine": 642, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0319", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 644, + "startColumn": 3, + "endLine": 644, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0320", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 646, + "startColumn": 3, + "endLine": 646, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0321", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 648, + "startColumn": 3, + "endLine": 648, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0322", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 650, + "startColumn": 3, + "endLine": 650, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0323", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 652, + "startColumn": 3, + "endLine": 652, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0324", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 654, + "startColumn": 3, + "endLine": 654, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0325", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 656, + "startColumn": 3, + "endLine": 656, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0326", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 658, + "startColumn": 3, + "endLine": 658, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0327", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 660, + "startColumn": 3, + "endLine": 660, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0328", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 662, + "startColumn": 3, + "endLine": 662, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0329", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 664, + "startColumn": 3, + "endLine": 664, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0330", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 666, + "startColumn": 3, + "endLine": 666, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0331", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 668, + "startColumn": 3, + "endLine": 668, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0332", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 670, + "startColumn": 3, + "endLine": 670, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0333", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 672, + "startColumn": 3, + "endLine": 672, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0334", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 674, + "startColumn": 3, + "endLine": 674, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0335", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 676, + "startColumn": 3, + "endLine": 676, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0336", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 678, + "startColumn": 3, + "endLine": 678, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0337", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 680, + "startColumn": 3, + "endLine": 680, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0338", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 682, + "startColumn": 3, + "endLine": 682, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0339", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 684, + "startColumn": 3, + "endLine": 684, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0340", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 686, + "startColumn": 3, + "endLine": 686, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0341", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 688, + "startColumn": 3, + "endLine": 688, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0342", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 690, + "startColumn": 3, + "endLine": 690, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0343", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 692, + "startColumn": 3, + "endLine": 692, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0344", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 694, + "startColumn": 3, + "endLine": 694, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0345", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 696, + "startColumn": 3, + "endLine": 696, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0346", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 698, + "startColumn": 3, + "endLine": 698, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0347", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 700, + "startColumn": 3, + "endLine": 700, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0348", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 702, + "startColumn": 3, + "endLine": 702, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0349", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 704, + "startColumn": 3, + "endLine": 704, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0350", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 706, + "startColumn": 3, + "endLine": 706, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0351", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 708, + "startColumn": 3, + "endLine": 708, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0352", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 710, + "startColumn": 3, + "endLine": 710, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0353", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 712, + "startColumn": 3, + "endLine": 712, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0354", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 714, + "startColumn": 3, + "endLine": 714, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0355", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 716, + "startColumn": 3, + "endLine": 716, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0356", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 718, + "startColumn": 3, + "endLine": 718, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0357", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 720, + "startColumn": 3, + "endLine": 720, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0358", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 722, + "startColumn": 3, + "endLine": 722, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0359", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 724, + "startColumn": 3, + "endLine": 724, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0360", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 726, + "startColumn": 3, + "endLine": 726, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0361", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 728, + "startColumn": 3, + "endLine": 728, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0362", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 730, + "startColumn": 3, + "endLine": 730, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0363", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 732, + "startColumn": 3, + "endLine": 732, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0364", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 734, + "startColumn": 3, + "endLine": 734, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0365", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 736, + "startColumn": 3, + "endLine": 736, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0366", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 738, + "startColumn": 3, + "endLine": 738, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0367", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 740, + "startColumn": 3, + "endLine": 740, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0368", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 742, + "startColumn": 3, + "endLine": 742, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0369", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 744, + "startColumn": 3, + "endLine": 744, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0370", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 746, + "startColumn": 3, + "endLine": 746, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0371", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 748, + "startColumn": 3, + "endLine": 748, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0372", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 750, + "startColumn": 3, + "endLine": 750, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0373", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 752, + "startColumn": 3, + "endLine": 752, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0374", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 754, + "startColumn": 3, + "endLine": 754, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0375", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 756, + "startColumn": 3, + "endLine": 756, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0376", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 758, + "startColumn": 3, + "endLine": 758, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0377", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 760, + "startColumn": 3, + "endLine": 760, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0378", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 762, + "startColumn": 3, + "endLine": 762, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0379", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 764, + "startColumn": 3, + "endLine": 764, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0380", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 766, + "startColumn": 3, + "endLine": 766, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0381", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 768, + "startColumn": 3, + "endLine": 768, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0382", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 770, + "startColumn": 3, + "endLine": 770, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0383", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 772, + "startColumn": 3, + "endLine": 772, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0384", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 774, + "startColumn": 3, + "endLine": 774, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0385", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 776, + "startColumn": 3, + "endLine": 776, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0386", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 778, + "startColumn": 3, + "endLine": 778, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0387", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 780, + "startColumn": 3, + "endLine": 780, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0388", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 782, + "startColumn": 3, + "endLine": 782, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0389", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 784, + "startColumn": 3, + "endLine": 784, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0390", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 786, + "startColumn": 3, + "endLine": 786, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0391", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 788, + "startColumn": 3, + "endLine": 788, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0392", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 790, + "startColumn": 3, + "endLine": 790, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0393", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 792, + "startColumn": 3, + "endLine": 792, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0394", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 794, + "startColumn": 3, + "endLine": 794, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0395", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 796, + "startColumn": 3, + "endLine": 796, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0396", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 798, + "startColumn": 3, + "endLine": 798, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0397", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 800, + "startColumn": 3, + "endLine": 800, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0398", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 802, + "startColumn": 3, + "endLine": 802, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0399", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 804, + "startColumn": 3, + "endLine": 804, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0400", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 806, + "startColumn": 3, + "endLine": 806, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0401", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 808, + "startColumn": 3, + "endLine": 808, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0402", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 810, + "startColumn": 3, + "endLine": 810, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0403", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 812, + "startColumn": 3, + "endLine": 812, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0404", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 814, + "startColumn": 3, + "endLine": 814, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0405", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 816, + "startColumn": 3, + "endLine": 816, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0406", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 818, + "startColumn": 3, + "endLine": 818, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0407", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 820, + "startColumn": 3, + "endLine": 820, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0408", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 822, + "startColumn": 3, + "endLine": 822, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0409", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 824, + "startColumn": 3, + "endLine": 824, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0410", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 826, + "startColumn": 3, + "endLine": 826, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0411", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 828, + "startColumn": 3, + "endLine": 828, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0412", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 830, + "startColumn": 3, + "endLine": 830, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0413", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 832, + "startColumn": 3, + "endLine": 832, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0414", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 834, + "startColumn": 3, + "endLine": 834, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0415", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 836, + "startColumn": 3, + "endLine": 836, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0416", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 838, + "startColumn": 3, + "endLine": 838, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0417", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 840, + "startColumn": 3, + "endLine": 840, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0418", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 842, + "startColumn": 3, + "endLine": 842, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0419", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 844, + "startColumn": 3, + "endLine": 844, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0420", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 846, + "startColumn": 3, + "endLine": 846, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0421", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 848, + "startColumn": 3, + "endLine": 848, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0422", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 850, + "startColumn": 3, + "endLine": 850, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0423", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 852, + "startColumn": 3, + "endLine": 852, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0424", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 854, + "startColumn": 3, + "endLine": 854, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0425", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 856, + "startColumn": 3, + "endLine": 856, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0426", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 858, + "startColumn": 3, + "endLine": 858, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0427", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 860, + "startColumn": 3, + "endLine": 860, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0428", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 862, + "startColumn": 3, + "endLine": 862, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0429", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 864, + "startColumn": 3, + "endLine": 864, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0430", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 866, + "startColumn": 3, + "endLine": 866, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0431", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 868, + "startColumn": 3, + "endLine": 868, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0432", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 870, + "startColumn": 3, + "endLine": 870, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0433", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 872, + "startColumn": 3, + "endLine": 872, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0434", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 874, + "startColumn": 3, + "endLine": 874, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0435", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 876, + "startColumn": 3, + "endLine": 876, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0436", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 878, + "startColumn": 3, + "endLine": 878, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0437", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 880, + "startColumn": 3, + "endLine": 880, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0438", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 882, + "startColumn": 3, + "endLine": 882, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0439", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 884, + "startColumn": 3, + "endLine": 884, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0440", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 886, + "startColumn": 3, + "endLine": 886, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0441", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 888, + "startColumn": 3, + "endLine": 888, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0442", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 890, + "startColumn": 3, + "endLine": 890, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0443", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 892, + "startColumn": 3, + "endLine": 892, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0444", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 894, + "startColumn": 3, + "endLine": 894, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0445", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 896, + "startColumn": 3, + "endLine": 896, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0446", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 898, + "startColumn": 3, + "endLine": 898, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0447", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 900, + "startColumn": 3, + "endLine": 900, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0448", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 902, + "startColumn": 3, + "endLine": 902, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0449", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 904, + "startColumn": 3, + "endLine": 904, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0450", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 906, + "startColumn": 3, + "endLine": 906, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0451", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 908, + "startColumn": 3, + "endLine": 908, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0452", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 910, + "startColumn": 3, + "endLine": 910, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0453", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 912, + "startColumn": 3, + "endLine": 912, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0454", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 914, + "startColumn": 3, + "endLine": 914, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0455", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 916, + "startColumn": 3, + "endLine": 916, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0456", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 918, + "startColumn": 3, + "endLine": 918, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0457", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 920, + "startColumn": 3, + "endLine": 920, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0458", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 922, + "startColumn": 3, + "endLine": 922, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0459", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 924, + "startColumn": 3, + "endLine": 924, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0460", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 926, + "startColumn": 3, + "endLine": 926, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0461", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 928, + "startColumn": 3, + "endLine": 928, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0462", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 930, + "startColumn": 3, + "endLine": 930, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0463", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 932, + "startColumn": 3, + "endLine": 932, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0464", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 934, + "startColumn": 3, + "endLine": 934, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0465", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 936, + "startColumn": 3, + "endLine": 936, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0466", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 938, + "startColumn": 3, + "endLine": 938, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0467", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 940, + "startColumn": 3, + "endLine": 940, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0468", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 942, + "startColumn": 3, + "endLine": 942, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0469", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 944, + "startColumn": 3, + "endLine": 944, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0470", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 946, + "startColumn": 3, + "endLine": 946, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0471", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 948, + "startColumn": 3, + "endLine": 948, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0472", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 950, + "startColumn": 3, + "endLine": 950, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0473", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 952, + "startColumn": 3, + "endLine": 952, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0474", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 954, + "startColumn": 3, + "endLine": 954, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0475", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 956, + "startColumn": 3, + "endLine": 956, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0476", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 958, + "startColumn": 3, + "endLine": 958, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0477", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 960, + "startColumn": 3, + "endLine": 960, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0478", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 962, + "startColumn": 3, + "endLine": 962, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0479", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 964, + "startColumn": 3, + "endLine": 964, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0480", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 966, + "startColumn": 3, + "endLine": 966, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0481", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 968, + "startColumn": 3, + "endLine": 968, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0482", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 970, + "startColumn": 3, + "endLine": 970, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0483", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 972, + "startColumn": 3, + "endLine": 972, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0484", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 974, + "startColumn": 3, + "endLine": 974, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0485", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 976, + "startColumn": 3, + "endLine": 976, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0486", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 978, + "startColumn": 3, + "endLine": 978, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0487", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 980, + "startColumn": 3, + "endLine": 980, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0488", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 982, + "startColumn": 3, + "endLine": 982, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0489", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 984, + "startColumn": 3, + "endLine": 984, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0490", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 986, + "startColumn": 3, + "endLine": 986, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0491", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 988, + "startColumn": 3, + "endLine": 988, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0492", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 990, + "startColumn": 3, + "endLine": 990, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0493", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 992, + "startColumn": 3, + "endLine": 992, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0494", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 994, + "startColumn": 3, + "endLine": 994, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0495", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 996, + "startColumn": 3, + "endLine": 996, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0496", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 998, + "startColumn": 3, + "endLine": 998, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0497", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1000, + "startColumn": 3, + "endLine": 1000, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0498", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1002, + "startColumn": 3, + "endLine": 1002, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + }, + { + "resource": { + "id": "Topic0499", + "resourceType": "AWS::SNS::Topic" + }, + "location": { + "startLine": 1004, + "startColumn": 3, + "endLine": 1004, + "endColumn": 12 + }, + "message": "No Metadata.com.aws.cloudformation.Context block found." + } + ], + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" }, - "suppressed": 0, - "strict": false, - "severityLevel": "DEBUG" - }, - "diagnostics": [ { "ruleId": "I9040", "severity": "INFO", @@ -313664,7 +397323,7 @@ "counts": { "fatal": 0, "errors": 0, - "warnings": 158, + "warnings": 160, "informational": 1, "debug": 0 }, @@ -316128,6 +399787,45 @@ "ruleDescription": "Conditions are semantically equivalent and can be consolidated", "phase": "PARSE" }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Template context metadata issues: No top-level Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "com.aws.cloudformation.Context", + "entityType": "Metadata" + }, + "propertyPath": "Metadata/com.aws.cloudformation.Context", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner.", + "category": "Best Practice", + "startLine": 213, + "startColumn": 1, + "endLine": 213, + "endColumn": 10, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, + { + "ruleId": "W9100", + "severity": "WARN", + "message": "Primary resource context metadata issues (1 resource(s)): GatedTopic: No Metadata.com.aws.cloudformation.Context block found.", + "source": "ENGINE", + "entity": { + "logicalId": "GatedTopic", + "entityType": "Resource", + "resourceType": "AWS::SNS::Topic" + }, + "propertyPath": "Metadata", + "suggestedFix": "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists.", + "category": "Best Practice", + "startLine": 214, + "startColumn": 3, + "endLine": 214, + "endColumn": 13, + "ruleDescription": "Validate namespaced context metadata on the template and primary resources", + "phase": "LINT" + }, { "ruleId": "I9040", "severity": "INFO", diff --git a/src/resources/templates/bad/W9100_context_malformed.yaml b/src/resources/templates/bad/W9100_context_malformed.yaml new file mode 100644 index 00000000..1e18d850 --- /dev/null +++ b/src/resources/templates/bad/W9100_context_malformed.yaml @@ -0,0 +1,26 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: Malformed context at both supported placements +Metadata: + com.aws.cloudformation.Context: + arch: + - not-a-string + why: "This field belongs on a resource" + ref: + - has: "Missing required at field" +Resources: + Bucket: + Type: AWS::S3::Bucket + Queue: + Type: AWS::SQS::Queue + Metadata: + com.aws.cloudformation.Context: + why: 42 + must: "not-an-array" + mutable: "sometimes" + mutability: + QueueName: "never-ish" + trust: + conf: "certain" + extra: true + ref: [] + unknown: true diff --git a/src/resources/templates/bad/W9100_context_missing.yaml b/src/resources/templates/bad/W9100_context_missing.yaml new file mode 100644 index 00000000..f339410e --- /dev/null +++ b/src/resources/templates/bad/W9100_context_missing.yaml @@ -0,0 +1,11 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: Missing context at template and primary-resource placements +Resources: + Bucket: + Type: AWS::S3::Bucket + Queue: + Type: AWS::SQS::Queue + CDKMetadata: + Type: AWS::CDK::Metadata + Properties: + Analytics: "v2:deflate64:H4sIAAAAAAAA/=" diff --git a/src/resources/templates/good/W9100_context_valid.yaml b/src/resources/templates/good/W9100_context_valid.yaml new file mode 100644 index 00000000..f98cc0e0 --- /dev/null +++ b/src/resources/templates/good/W9100_context_valid.yaml @@ -0,0 +1,47 @@ +AWSTemplateFormatVersion: "2010-09-09" +Description: Valid namespaced context metadata at both supported placements +Metadata: + com.aws.cloudformation.Context: + arch: "SQS buffer to Lambda consumer" + must: + - "All data remains encrypted" + ref: + - "context/common.yaml" + - at: "s3://example/context.yaml" + has: "shared constraints" + scope: "shared" + owner: "orders-team" +Resources: + OrderQueue: + Type: AWS::SQS::Queue + Metadata: + com.aws.cloudformation.Context: + why: "Buffers order events for asynchronous processing" + must: + - "Visibility timeout remains above function timeout" + mutable: "change-with-constraints" + mutability: + QueueName: "must-never-change" + Tags: "free-to-tune" + trust: + src: "authored" + conf: "high" + cite: "design.md" + note: "Reviewed by service owner" + ops: "Check queue age before changing throughput" + gaps: + - "Peak traffic profile not documented" + deps: + - "orders-events" + failureModes: + - "Consumer outage increases queue age" + CDKMetadata: + Type: AWS::CDK::Metadata + Properties: + Analytics: "v2:deflate64:H4sIAAAAAAAA/=" + CustomProviderFunction: + Type: AWS::Lambda::Function + LogRetentionFunction: + Type: AWS::Lambda::Function + Metadata: + aws:cdk:path: Stack/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource diff --git a/src/rules/src/registry.rs b/src/rules/src/registry.rs index 8755554b..b363fdcb 100644 --- a/src/rules/src/registry.rs +++ b/src/rules/src/registry.rs @@ -1952,6 +1952,12 @@ pub const RULE_REGISTRY: &[RuleDefinition] = &[ description: "VirtualName is ignored when Ebs is specified", origin: RuleOrigin::CfnLint, }, + RuleDefinition { + id: "W9100", + category: Category::BestPractice, + description: "Validate namespaced context metadata on the template and primary resources", + origin: RuleOrigin::Engine, + }, ]; #[cfg(test)] diff --git a/src/validation-engine/src/context_check.rs b/src/validation-engine/src/context_check.rs new file mode 100644 index 00000000..08f46c55 --- /dev/null +++ b/src/validation-engine/src/context_check.rs @@ -0,0 +1,816 @@ +//! Canonical validation for CloudFormation context metadata. + +use data_source::embedded::METADATA_CONTEXT_V1_SCHEMA_BYTES; +use diagnostics::{Diagnostic, RegisteredDiagnostic, RelatedResource, ResourceRef}; +use serde_json::{Map, Value}; +use std::collections::BTreeSet; +use std::sync::OnceLock; +use template_model::{SemanticModel, UNKNOWN_SPAN}; + +const RULE_ID: &str = "W9100"; +const CONTEXT_KEY: &str = "com.aws.cloudformation.Context"; +const TEMPLATE_CONTEXT_PATH: &str = "Metadata/com.aws.cloudformation.Context"; +const RESOURCE_CONTEXT_PATH: &str = "Metadata"; +const TEMPLATE_SCHEMA_DEFINITION: &str = "TemplateContext"; +const RESOURCE_SCHEMA_DEFINITION: &str = "ResourceContext"; +const SCHEMA_ID: &str = "https://cloudformation.aws.dev/schema/metadata-context/v1.json"; +const INCIDENTAL_RESOURCE_TYPE: &str = "AWS::CDK::Metadata"; +const INCIDENTAL_LOGICAL_ID: &str = "CDKMetadata"; +const INCIDENTAL_PATH_FRAGMENTS: &[&str] = &[ + "LogRetention", + "Provider", + "framework-onEvent", + "framework-isComplete", + "framework-onTimeout", + "AWS679f53fac002430cb0da5b7982bd2287", +]; +const TEMPLATE_SUGGESTED_FIX: &str = + "Add or fix Metadata.com.aws.cloudformation.Context using template-level fields: arch, must, ref, and owner."; +const RESOURCE_SUGGESTED_FIX: &str = "Add or fix Metadata.com.aws.cloudformation.Context on each primary resource. Include why, or use gaps when the rationale is not known; add must only when a real binding rule exists."; + +static CONTEXT_SCHEMA: OnceLock> = OnceLock::new(); + +#[derive(Debug)] +struct ContextSchema { + document: Value, + template_fields: BTreeSet, + resource_fields: BTreeSet, +} + +impl ContextSchema { + fn from_embedded() -> Result { + let document: Value = serde_json::from_slice(&METADATA_CONTEXT_V1_SCHEMA_BYTES) + .map_err(|error| format!("Failed to parse embedded metadata context schema: {error}"))?; + let actual_id = document + .get("$id") + .and_then(Value::as_str) + .ok_or_else(|| "Embedded metadata context schema is missing its required string '$id' field".to_string())?; + if actual_id != SCHEMA_ID { + return Err(format!( + "Embedded metadata context schema has unexpected '$id': expected '{SCHEMA_ID}', found '{actual_id}'" + )); + } + + let template_fields = definition_fields(&document, TEMPLATE_SCHEMA_DEFINITION)?; + let resource_fields = definition_fields(&document, RESOURCE_SCHEMA_DEFINITION)?; + Ok(Self { document, template_fields, resource_fields }) + } + + fn definition(&self, definition_name: &str) -> Result<&Value, String> { + self.document + .pointer(&format!("/$defs/{definition_name}")) + .ok_or_else(|| format!("Embedded metadata context schema is missing '$defs/{definition_name}'")) + } + + fn validate(&self, definition_name: &str, instance: &Value) -> Result, String> { + let mut violations = Vec::new(); + validate_schema_node(instance, self.definition(definition_name)?, &self.document, "", &mut violations)?; + violations.sort_by(|left, right| { + left.path.cmp(&right.path).then_with(|| left.description().cmp(&right.description())) + }); + Ok(violations) + } +} + +#[derive(Debug)] +struct ResourceContextIssues { + logical_id: String, + resource_type: String, + findings: Vec, +} + +#[derive(Debug, Clone)] +struct SchemaViolation { + path: String, + kind: SchemaViolationKind, +} + +impl SchemaViolation { + fn description(&self) -> String { + match &self.kind { + SchemaViolationKind::InvalidType { expected } => format!("Expected {expected}."), + SchemaViolationKind::InvalidEnum { value, allowed } => { + format!("Value '{value}' is not recognized. Allowed values: {}.", allowed.join(", ")) + } + SchemaViolationKind::MissingRequired => "Required field is missing.".to_string(), + SchemaViolationKind::AdditionalProperty => "Field is not recognized.".to_string(), + SchemaViolationKind::OneOf => "Expected exactly one supported shape.".to_string(), + } + } + + fn weight(&self) -> usize { + match self.kind { + SchemaViolationKind::InvalidType { .. } => 10, + _ => 1, + } + } +} + +#[derive(Debug, Clone)] +enum SchemaViolationKind { + InvalidType { expected: String }, + InvalidEnum { value: String, allowed: Vec }, + MissingRequired, + AdditionalProperty, + OneOf, +} + +pub(crate) fn check_context(model: &SemanticModel) -> Result, String> { + let schema = context_schema()?; + let template_findings = validate_template_metadata(model.template_metadata.as_ref(), schema)?; + let resource_issues = validate_primary_resource_metadata(model, schema)?; + let mut diagnostics = Vec::with_capacity(2); + + if !template_findings.is_empty() { + diagnostics.push(build_template_diagnostic(model, &template_findings)); + } + if !resource_issues.is_empty() { + diagnostics.push(build_resource_diagnostic(model, &resource_issues)); + } + + Ok(diagnostics) +} + +fn context_schema() -> Result<&'static ContextSchema, String> { + match CONTEXT_SCHEMA.get_or_init(ContextSchema::from_embedded) { + Ok(schema) => Ok(schema), + Err(error) => Err(error.clone()), + } +} + +fn definition_fields(document: &Value, definition_name: &str) -> Result, String> { + let properties = document + .pointer(&format!("/$defs/{definition_name}/properties")) + .and_then(Value::as_object) + .ok_or_else(|| { + format!("Embedded metadata context schema definition '{definition_name}' is missing object 'properties'") + })?; + Ok(properties.keys().cloned().collect()) +} + +fn validate_template_metadata(metadata: Option<&Value>, schema: &ContextSchema) -> Result, String> { + let Some(metadata_object) = metadata.and_then(Value::as_object) else { + return Ok(vec![format!("No top-level Metadata.{CONTEXT_KEY} block found.")]); + }; + let Some(context) = metadata_object.get(CONTEXT_KEY) else { + return Ok(vec![format!("No top-level Metadata.{CONTEXT_KEY} block found.")]); + }; + + let violations = schema.validate(TEMPLATE_SCHEMA_DEFINITION, context)?; + Ok(format_schema_violations( + violations, + &schema.resource_fields, + "template", + "resource", + &format!("Top-level Metadata.{CONTEXT_KEY}"), + )) +} + +fn validate_primary_resource_metadata( + model: &SemanticModel, + schema: &ContextSchema, +) -> Result, String> { + let mut logical_ids: Vec<&String> = model.resources.keys().collect(); + logical_ids.sort(); + let mut resource_issues = Vec::new(); + + for logical_id in logical_ids { + let Some(resource) = model.resources.get(logical_id) else { + return Err(format!("Resource '{logical_id}' disappeared while validating context metadata")); + }; + if is_incidental_resource(model, logical_id, &resource.resource_type, resource.metadata.as_deref()) { + continue; + } + + let findings = validate_resource_metadata(resource.metadata.as_deref(), schema)?; + if !findings.is_empty() { + resource_issues.push(ResourceContextIssues { + logical_id: logical_id.clone(), + resource_type: resource.resource_type.clone(), + findings, + }); + } + } + + Ok(resource_issues) +} + +fn validate_resource_metadata(metadata: Option<&Value>, schema: &ContextSchema) -> Result, String> { + let Some(metadata_object) = metadata.and_then(Value::as_object) else { + return Ok(vec![format!("No Metadata.{CONTEXT_KEY} block found.")]); + }; + let Some(context) = metadata_object.get(CONTEXT_KEY) else { + return Ok(vec![format!("No Metadata.{CONTEXT_KEY} block found.")]); + }; + + let violations = schema.validate(RESOURCE_SCHEMA_DEFINITION, context)?; + let mut findings = format_schema_violations( + violations, + &schema.template_fields, + "resource", + "template", + &format!("Metadata.{CONTEXT_KEY}"), + ); + if let Some(context_object) = context.as_object() { + validate_resource_requirements(context_object, &mut findings); + } + Ok(findings) +} + +fn format_schema_violations( + violations: Vec, + opposite_placement_fields: &BTreeSet, + placement: &str, + correct_placement: &str, + block_label: &str, +) -> Vec { + violations + .into_iter() + .map(|violation| { + if violation.path.is_empty() { + return format!("{block_label} does not match the expected shape. {}", violation.description()); + } + if matches!(violation.kind, SchemaViolationKind::AdditionalProperty) + && !violation.path.contains('.') + && !violation.path.contains('[') + && opposite_placement_fields.contains(&violation.path) + { + return format!("'{}' belongs at {correct_placement} level.", violation.path); + } + match violation.kind { + SchemaViolationKind::AdditionalProperty => { + format!("'{}' is not recognized by the {placement} context schema.", violation.path) + } + _ => format!("'{}' does not match the expected shape. {}", violation.path, violation.description()), + } + }) + .collect() +} + +fn validate_schema_node( + instance: &Value, + schema: &Value, + root_schema: &Value, + path: &str, + violations: &mut Vec, +) -> Result<(), String> { + let schema_object = schema + .as_object() + .ok_or_else(|| format!("Embedded metadata context schema node at '{}' is not an object", display_path(path)))?; + + if let Some(reference) = schema_object.get("$ref").and_then(Value::as_str) { + let pointer = reference.strip_prefix('#').ok_or_else(|| { + format!("Embedded metadata context schema contains unsupported external reference '{reference}'") + })?; + let referenced_schema = root_schema + .pointer(pointer) + .ok_or_else(|| format!("Embedded metadata context schema reference '{reference}' does not resolve"))?; + return validate_schema_node(instance, referenced_schema, root_schema, path, violations); + } + + if let Some(branches) = schema_object.get("oneOf").and_then(Value::as_array) { + return validate_one_of(instance, branches, root_schema, path, violations); + } + + if let Some(expected_type) = schema_object.get("type").and_then(Value::as_str) + && !matches_json_type(instance, expected_type) + { + violations.push(SchemaViolation { + path: path.to_string(), + kind: SchemaViolationKind::InvalidType { expected: type_description(expected_type) }, + }); + return Ok(()); + } + + if let Some(allowed_values) = schema_object.get("enum").and_then(Value::as_array) + && !allowed_values.contains(instance) + { + violations.push(SchemaViolation { + path: path.to_string(), + kind: SchemaViolationKind::InvalidEnum { + value: display_value(instance), + allowed: allowed_values.iter().map(display_value).collect(), + }, + }); + } + + if let Some(instance_object) = instance.as_object() { + validate_object(instance_object, schema_object, root_schema, path, violations)?; + } + if let Some(instance_array) = instance.as_array() + && let Some(item_schema) = schema_object.get("items") + { + for (index, item) in instance_array.iter().enumerate() { + validate_schema_node(item, item_schema, root_schema, &index_path(path, index), violations)?; + } + } + + Ok(()) +} + +fn validate_one_of( + instance: &Value, + branches: &[Value], + root_schema: &Value, + path: &str, + violations: &mut Vec, +) -> Result<(), String> { + let mut branch_violations = Vec::with_capacity(branches.len()); + for branch in branches { + let mut candidate_violations = Vec::new(); + validate_schema_node(instance, branch, root_schema, path, &mut candidate_violations)?; + branch_violations.push(candidate_violations); + } + + let matching_branches = branch_violations.iter().filter(|candidate| candidate.is_empty()).count(); + if matching_branches == 1 { + return Ok(()); + } + if matching_branches > 1 { + violations.push(SchemaViolation { path: path.to_string(), kind: SchemaViolationKind::OneOf }); + return Ok(()); + } + + let best_candidate = branch_violations + .into_iter() + .min_by_key(|candidate| candidate.iter().map(SchemaViolation::weight).sum::()) + .unwrap_or_else(|| vec![SchemaViolation { path: path.to_string(), kind: SchemaViolationKind::OneOf }]); + violations.extend(best_candidate); + Ok(()) +} + +fn validate_object( + instance: &Map, + schema: &Map, + root_schema: &Value, + path: &str, + violations: &mut Vec, +) -> Result<(), String> { + let properties = schema.get("properties").and_then(Value::as_object); + if let Some(required_fields) = schema.get("required").and_then(Value::as_array) { + for required_field in required_fields.iter().filter_map(Value::as_str) { + if !instance.contains_key(required_field) { + violations.push(SchemaViolation { + path: field_path(path, required_field), + kind: SchemaViolationKind::MissingRequired, + }); + } + } + } + + for (field, value) in instance { + let child_path = field_path(path, field); + if let Some(property_schema) = properties.and_then(|known| known.get(field)) { + validate_schema_node(value, property_schema, root_schema, &child_path, violations)?; + continue; + } + match schema.get("additionalProperties") { + Some(Value::Bool(false)) => { + violations.push(SchemaViolation { path: child_path, kind: SchemaViolationKind::AdditionalProperty }) + } + Some(additional_schema @ Value::Object(_)) => { + validate_schema_node(value, additional_schema, root_schema, &child_path, violations)?; + } + _ => {} + } + } + Ok(()) +} + +fn matches_json_type(value: &Value, expected_type: &str) -> bool { + match expected_type { + "array" => value.is_array(), + "boolean" => value.is_boolean(), + "integer" => value.as_i64().is_some() || value.as_u64().is_some(), + "null" => value.is_null(), + "number" => value.is_number(), + "object" => value.is_object(), + "string" => value.is_string(), + _ => false, + } +} + +fn type_description(schema_type: &str) -> String { + match schema_type { + "array" => "an array".to_string(), + "object" => "an object".to_string(), + other => format!("a {other}"), + } +} + +fn display_value(value: &Value) -> String { + value.as_str().map(str::to_string).unwrap_or_else(|| value.to_string()) +} + +fn display_path(path: &str) -> &str { + if path.is_empty() { "(root)" } else { path } +} + +fn field_path(parent: &str, field: &str) -> String { + if parent.is_empty() { field.to_string() } else { format!("{parent}.{field}") } +} + +fn index_path(parent: &str, index: usize) -> String { + format!("{parent}[{index}]") +} + +fn validate_resource_requirements(context: &Map, findings: &mut Vec) { + let has_why = context.contains_key("why"); + let has_acknowledged_gap = context + .get("gaps") + .and_then(Value::as_array) + .is_some_and(|gaps| gaps.iter().any(|gap| gap.as_str().is_some_and(|text| !text.trim().is_empty()))); + if !has_why && !has_acknowledged_gap { + findings.push("Metadata context has no 'why' and no non-empty 'gaps' entry.".to_string()); + } + + let restrictive_levels = restrictive_mutability_levels(context); + let has_must_entry = context + .get("must") + .and_then(Value::as_array) + .is_some_and(|rules| rules.iter().any(|rule| rule.as_str().is_some_and(|text| !text.trim().is_empty()))); + if !restrictive_levels.is_empty() && !has_must_entry { + findings.push(format!( + "Mutability level(s) {} require a non-empty 'must' entry stating the constraint.", + restrictive_levels.into_iter().collect::>().join(", ") + )); + } +} + +fn restrictive_mutability_levels(context: &Map) -> BTreeSet<&str> { + let mut levels = BTreeSet::new(); + if let Some(level) = context.get("mutable").and_then(Value::as_str) + && is_restrictive_mutability_level(level) + { + levels.insert(level); + } + if let Some(overrides) = context.get("mutability").and_then(Value::as_object) { + for level in overrides.values().filter_map(Value::as_str) { + if is_restrictive_mutability_level(level) { + levels.insert(level); + } + } + } + levels +} + +fn is_restrictive_mutability_level(level: &str) -> bool { + matches!(level, "must-never-change" | "change-with-constraints") +} + +fn is_incidental_resource( + model: &SemanticModel, + logical_id: &str, + resource_type: &str, + metadata: Option<&Value>, +) -> bool { + if model.sam_implicit_resources.contains(logical_id) + || resource_type == INCIDENTAL_RESOURCE_TYPE + || logical_id == INCIDENTAL_LOGICAL_ID + { + return true; + } + + let cdk_path = metadata + .and_then(Value::as_object) + .and_then(|metadata_object| metadata_object.get("aws:cdk:path")) + .and_then(Value::as_str); + INCIDENTAL_PATH_FRAGMENTS + .iter() + .any(|fragment| logical_id.contains(fragment) || cdk_path.is_some_and(|path| path.contains(fragment))) +} + +fn build_template_diagnostic(model: &SemanticModel, findings: &[String]) -> Diagnostic { + let message = format!("Template context metadata issues: {}", findings.join(" ")); + let mut builder = RegisteredDiagnostic::new(RULE_ID, message) + .property_path(TEMPLATE_CONTEXT_PATH) + .suggested_fix(Some(TEMPLATE_SUGGESTED_FIX)); + if let Some(span) = model + .diagnostic_span(None, TEMPLATE_CONTEXT_PATH) + .or_else(|| model.source_location("Metadata").copied()) + .or_else(|| model.source_location("Resources").copied()) + { + builder = builder.location(span); + } + builder.build() +} + +fn build_resource_diagnostic(model: &SemanticModel, resource_issues: &[ResourceContextIssues]) -> Diagnostic { + let first = &resource_issues[0]; + let issue_summaries = resource_issues + .iter() + .map(|resource| format!("{}: {}", resource.logical_id, resource.findings.join(" "))) + .collect::>() + .join("; "); + let message = + format!("Primary resource context metadata issues ({} resource(s)): {issue_summaries}", resource_issues.len()); + let related_resources = resource_issues + .iter() + .skip(1) + .map(|resource| { + let span = model.resource_span(&resource.logical_id, RESOURCE_CONTEXT_PATH); + RelatedResource { + resource: Some(ResourceRef { + id: Some(resource.logical_id.clone()), + resource_type: Some(resource.resource_type.clone()), + }), + location: (span != UNKNOWN_SPAN).then_some(span), + message: resource.findings.join(" "), + } + }) + .collect::>(); + + RegisteredDiagnostic::new(RULE_ID, message) + .resource(first.logical_id.clone(), Some(first.resource_type.clone())) + .property_path(RESOURCE_CONTEXT_PATH) + .location(model.resource_span(&first.logical_id, RESOURCE_CONTEXT_PATH)) + .suggested_fix(Some(RESOURCE_SUGGESTED_FIX)) + .related_resources((!related_resources.is_empty()).then_some(related_resources)) + .build() +} + +#[cfg(test)] +mod tests { + use super::*; + + fn model(yaml: &str) -> SemanticModel { + SemanticModel::from_bytes(yaml.as_bytes()).expect("template should parse") + } + + fn check(yaml: &str) -> Vec { + check_context(&model(yaml)).expect("embedded context schema should load") + } + + fn valid_template_context() -> &'static str { + r#" +Metadata: + com.aws.cloudformation.Context: + arch: "SQS to Lambda to DynamoDB" + must: + - "All data encrypted" + ref: + - "context/common.yaml" + - at: "s3://example/context.yaml" + has: "shared constraints" + scope: "shared" + owner: "payments-team" +"# + } + + fn valid_resource_context() -> &'static str { + r#" + Metadata: + com.aws.cloudformation.Context: + why: "Buffers order events for asynchronous processing" + must: + - "Visibility timeout remains above function timeout" + mutable: "change-with-constraints" + mutability: + QueueName: "must-never-change" + Tags: "free-to-tune" + trust: + src: "authored" + conf: "high" + cite: "design.md" + note: "Reviewed by service owner" + ops: "Check queue age before changing throughput" + gaps: + - "Peak traffic profile not documented" + deps: + - "orders-events" + failureModes: + - "Consumer outage increases queue age" +"# + } + + #[test] + fn vendored_schema_has_canonical_id_and_placement_fields() { + let schema = context_schema().expect("embedded context schema should load"); + + assert_eq!(schema.document["$id"], SCHEMA_ID); + assert_eq!( + schema.template_fields, + BTreeSet::from(["arch".to_string(), "must".to_string(), "owner".to_string(), "ref".to_string()]) + ); + assert_eq!( + schema.resource_fields, + BTreeSet::from([ + "deps".to_string(), + "failureModes".to_string(), + "gaps".to_string(), + "must".to_string(), + "mutability".to_string(), + "mutable".to_string(), + "ops".to_string(), + "trust".to_string(), + "why".to_string(), + ]) + ); + } + + #[test] + fn valid_context_at_both_placements_produces_no_diagnostics() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\n{}Resources:\n OrderQueue:\n Type: AWS::SQS::Queue\n{}", + valid_template_context(), + valid_resource_context() + ); + + let diagnostics = check(&template); + + assert!(diagnostics.is_empty(), "valid canonical context should not be flagged: {diagnostics:?}"); + } + + #[test] + fn legacy_bare_context_key_is_not_an_alias() { + let template = r#" +AWSTemplateFormatVersion: "2010-09-09" +Metadata: + Context: + arch: "legacy" +Resources: + Queue: + Type: AWS::SQS::Queue + Metadata: + Context: + why: "legacy" +"#; + + let diagnostics = check(template); + + assert_eq!(diagnostics.len(), 2, "both canonical placements are missing"); + assert!(diagnostics.iter().all(|diagnostic| diagnostic.message.contains(CONTEXT_KEY))); + } + + #[test] + fn missing_template_and_multiple_primary_resources_produce_two_diagnostics() { + let template = r#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + Bucket: + Type: AWS::S3::Bucket + Queue: + Type: AWS::SQS::Queue +"#; + + let diagnostics = check(template); + + assert_eq!(diagnostics.len(), 2, "findings must be bounded by template and resource scope"); + let resource_diagnostic = diagnostics + .iter() + .find(|diagnostic| diagnostic.entity.is_some()) + .expect("resource aggregate should be present"); + assert!(resource_diagnostic.message.contains("Bucket")); + assert!(resource_diagnostic.message.contains("Queue")); + assert_eq!(resource_diagnostic.related_resources.as_ref().map(Vec::len), Some(1)); + } + + #[test] + fn valid_resource_context_does_not_satisfy_missing_template_context() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\nResources:\n OrderQueue:\n Type: AWS::SQS::Queue\n{}", + valid_resource_context() + ); + + let diagnostics = check(&template); + + assert_eq!(diagnostics.len(), 1); + assert!(diagnostics[0].entity.is_none(), "only the template scope should be flagged"); + } + + #[test] + fn valid_template_context_does_not_satisfy_missing_resource_context() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\n{}Resources:\n OrderQueue:\n Type: AWS::SQS::Queue\n", + valid_template_context() + ); + + let diagnostics = check(&template); + + assert_eq!(diagnostics.len(), 1); + assert_eq!(diagnostics[0].resource_logical_id(), Some("OrderQueue")); + } + + #[test] + fn malformed_fields_are_aggregated_by_scope() { + let template = r#" +AWSTemplateFormatVersion: "2010-09-09" +Metadata: + com.aws.cloudformation.Context: + arch: [not, a, string] + why: "resource-only" + ref: + - has: "missing at" +Resources: + Queue: + Type: AWS::SQS::Queue + Metadata: + com.aws.cloudformation.Context: + why: 42 + must: "not an array" + mutable: "yolo" + mutability: + QueueName: "sometimes" + trust: + conf: "certain" + extra: true + ref: [] + unknown: true +"#; + + let diagnostics = check(template); + + assert_eq!(diagnostics.len(), 2, "all issues must remain bounded to two diagnostics"); + let combined = diagnostics.iter().map(|diagnostic| diagnostic.message.as_str()).collect::>().join(" "); + for expected in [ + "arch", + "why' belongs at resource level", + "ref[0].at", + "must", + "mutable", + "mutability.QueueName", + "trust.src", + "trust.conf", + "trust.extra", + "ref' belongs at template level", + "unknown", + ] { + assert!(combined.contains(expected), "missing {expected:?} from {combined}"); + } + } + + #[test] + fn missing_why_can_be_acknowledged_with_gaps() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\n{}Resources:\n Queue:\n Type: AWS::SQS::Queue\n Metadata:\n com.aws.cloudformation.Context:\n gaps:\n - 'rationale not documented'\n", + valid_template_context() + ); + + let diagnostics = check(&template); + + assert!(diagnostics.is_empty(), "an honest non-empty gap is a valid alternative to why: {diagnostics:?}"); + } + + #[test] + fn restrictive_mutability_requires_non_empty_must_entry() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\n{}Resources:\n Queue:\n Type: AWS::SQS::Queue\n Metadata:\n com.aws.cloudformation.Context:\n why: 'Buffers events'\n mutable: 'must-never-change'\n", + valid_template_context() + ); + + let diagnostics = check(&template); + + assert_eq!(diagnostics.len(), 1); + assert!(diagnostics[0].message.contains("require a non-empty 'must' entry")); + } + + #[test] + fn cdk_incidental_resources_are_not_flagged() { + let template = format!( + "AWSTemplateFormatVersion: '2010-09-09'\n{}Resources:\n CDKMetadata:\n Type: AWS::CDK::Metadata\n CustomProviderframeworkonEvent:\n Type: AWS::Lambda::Function\n Helper:\n Type: AWS::Lambda::Function\n Metadata:\n aws:cdk:path: Stack/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource\n", + valid_template_context() + ); + + let diagnostics = check(&template); + + assert!(diagnostics.is_empty(), "framework resources must be excluded: {diagnostics:?}"); + } + + #[test] + fn many_invalid_resources_still_produce_at_most_two_diagnostics() { + let mut resources = String::new(); + for index in 0..20 { + resources.push_str(&format!( + " Queue{index}:\n Type: AWS::SQS::Queue\n Metadata:\n com.aws.cloudformation.Context:\n mutable: invalid\n" + )); + } + let template = format!("AWSTemplateFormatVersion: '2010-09-09'\nResources:\n{resources}"); + + let diagnostics = check(&template); + + assert_eq!(diagnostics.len(), 2); + assert_eq!(diagnostics.iter().filter(|diagnostic| diagnostic.rule_id == RULE_ID).count(), 2); + assert!(diagnostics.iter().any(|diagnostic| diagnostic.message.contains("Queue19"))); + } + + #[test] + fn suggested_fix_preserves_the_honesty_alternative() { + let template = r#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + Queue: + Type: AWS::SQS::Queue +"#; + + let diagnostics = check(template); + let combined_fixes = diagnostics + .iter() + .filter_map(|diagnostic| diagnostic.suggested_fix.as_deref()) + .collect::>() + .join(" "); + + assert!(combined_fixes.contains(CONTEXT_KEY)); + assert!(combined_fixes.contains("gaps")); + assert!(combined_fixes.contains("only when a real binding rule exists")); + } +} diff --git a/src/validation-engine/src/engine.rs b/src/validation-engine/src/engine.rs index a692e08c..22432619 100644 --- a/src/validation-engine/src/engine.rs +++ b/src/validation-engine/src/engine.rs @@ -264,6 +264,7 @@ pub(crate) fn validate( let t_post = Instant::now(); if !config.disable_builtin_rules { all_diagnostics.extend(crate::step_functions::validate_all_state_machines(&model)); + all_diagnostics.extend(crate::context_check::check_context(&model)?); all_diagnostics.extend(model.diagnostics.iter().map(diagnostic_from_parse_defect)); // The satisfiability budget is consumed almost entirely by the rule diff --git a/src/validation-engine/src/lib.rs b/src/validation-engine/src/lib.rs index d7bfcd73..2e65eb4f 100644 --- a/src/validation-engine/src/lib.rs +++ b/src/validation-engine/src/lib.rs @@ -1,6 +1,7 @@ #[cfg(feature = "uniffi-bindings")] uniffi::setup_scaffolding!(); +pub(crate) mod context_check; pub mod engine; pub mod guard; pub(crate) mod step_functions;