From b840f0f67cbcc052f4d70e458638d3e6a9e54217 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Tue, 30 Jun 2026 15:19:45 -0400 Subject: [PATCH 1/3] context --- out_w9100/report.md | 63 +++ out_w9100/results.json | 524 +++++++++++++++++++++ scripts/bench_w9100.py | 281 +++++++++++ src/rules/src/registry.rs | 6 + src/validation-engine/src/context_check.rs | 290 ++++++++++++ src/validation-engine/src/engine.rs | 1 + src/validation-engine/src/lib.rs | 1 + 7 files changed, 1166 insertions(+) create mode 100644 out_w9100/report.md create mode 100644 out_w9100/results.json create mode 100644 scripts/bench_w9100.py create mode 100644 src/validation-engine/src/context_check.rs diff --git a/out_w9100/report.md b/out_w9100/report.md new file mode 100644 index 00000000..a95d4e52 --- /dev/null +++ b/out_w9100/report.md @@ -0,0 +1,63 @@ +# W9100 Missing-Context Diagnostic Benchmark + +## Overall Discrimination + +| Variant | Fixtures | Fixtures Flagged | Flag Rate | +|---------|----------|------------------|-----------| +| nocontext | 29 | 29 | 100.00% | +| context | 29 | 1 | 3.45% | + +**Discrimination delta:** 96.55% (nocontext flag rate − context flag rate) + +## Correctness + +- False negatives (nocontext fixture emits 0 W9100): **0** — must be 0 +- False positives (context fixture emits W9100): **1** — must be 0; context at the template level OR on any resource satisfies the check + +❌ Diagnostic does not discriminate cleanly — see per-fixture breakdown. + +## Per-Scenario Breakdown + +| Scenario | nocontext W9100 | context W9100 | Discriminates | +|----------|-----------------|---------------|---------------| +| add-dlq | 1 | 0 | ✓ | +| api-rate-limit-sharing | 1 | 0 | ✓ | +| canary-percentage-cap | 1 | 0 | ✓ | +| cfn-hook-awareness | 1 | 0 | ✓ | +| circular-dependency-prevention | 1 | 0 | ✓ | +| conditional-resource-coupling | 1 | 0 | ✓ | +| cost-allocation-team-budget | 1 | 0 | ✓ | +| cross-stack-reference-safety | 1 | 0 | ✓ | +| custom-naming-convention-violation | 1 | 0 | ✓ | +| deployment-window-restriction | 1 | 0 | ✓ | +| drift-detection-annotation | 1 | 0 | ✓ | +| environment-parameter-propagation | 1 | 0 | ✓ | +| failover-primary-designation | 1 | 0 | ✓ | +| flag-unmanaged | 1 | 0 | ✓ | +| iam-permission-boundary-respect | 1 | 0 | ✓ | +| inter-stack-ordering-dependency | 1 | 0 | ✓ | +| internal-sla-timeout-coupling | 1 | 0 | ✓ | +| lambda-layer-version-pinning | 1 | 0 | ✓ | +| max-memory-budget-constraint | 1 | 0 | ✓ | +| persist-context | 1 | 0 | ✓ | +| reserved-cidr-block | 1 | 0 | ✓ | +| resource-limit-awareness | 1 | 0 | ✓ | +| respect-constraint | 1 | 0 | ✓ | +| retain-deletion-policy | 1 | 0 | ✓ | +| security-group-blast-radius | 1 | 0 | ✓ | +| stack-output-dependency-chain | 1 | 1 | ✗ | +| tag-propagation-compliance | 1 | 0 | ✓ | +| update-policy-respect | 1 | 0 | ✓ | +| update-replacement-warning | 1 | 0 | ✓ | + +## Methodology + +Every fixture pair `-nocontext.yaml` / `-context.yaml` is run through the cfn-validate CLI with `--include-ids W9100` so only the missing-context diagnostic is reported. The diagnostic fires at most once per template: it emits a single W9100 warning when neither the top-level `Metadata.Context` block nor any resource's `Metadata.Context` carries design intent (`why`, `decisions`, `constraints`, `mutability`, or `metricsGuidance` with a non-empty value). + +**Expected behavior.** A fixture in the nocontext arm has no Metadata.Context anywhere, so the diagnostic should fire exactly once. A fixture in the context arm has Metadata.Context at the template level, on at least one resource, or both — so the diagnostic should not fire at all. Clean discrimination is `100% (nocontext) → 0% (context)`. + +**What this benchmark does NOT measure.** This is a static-correctness check on the diagnostic itself — not an agent-behavior benchmark. It answers "does the diagnostic distinguish present-vs-absent context?", not "does the diagnostic feedback cause downstream tooling to add context?". The latter requires running the CfnCloudContextPOCs harness with a validation-feedback loop wired in. + +## Errors + +No fixture failed to validate. diff --git a/out_w9100/results.json b/out_w9100/results.json new file mode 100644 index 00000000..2eecf637 --- /dev/null +++ b/out_w9100/results.json @@ -0,0 +1,524 @@ +[ + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/add-dlq-nocontext.yaml", + "resources_scanned": 2, + "scenario": "add-dlq", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/add-dlq-context.yaml", + "resources_scanned": 2, + "scenario": "add-dlq", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/api-rate-limit-sharing-nocontext.yaml", + "resources_scanned": 2, + "scenario": "api-rate-limit-sharing", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/api-rate-limit-sharing-context.yaml", + "resources_scanned": 2, + "scenario": "api-rate-limit-sharing", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/canary-percentage-cap-nocontext.yaml", + "resources_scanned": 3, + "scenario": "canary-percentage-cap", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/canary-percentage-cap-context.yaml", + "resources_scanned": 3, + "scenario": "canary-percentage-cap", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cfn-hook-awareness-nocontext.yaml", + "resources_scanned": 1, + "scenario": "cfn-hook-awareness", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cfn-hook-awareness-context.yaml", + "resources_scanned": 1, + "scenario": "cfn-hook-awareness", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/circular-dependency-prevention-nocontext.yaml", + "resources_scanned": 2, + "scenario": "circular-dependency-prevention", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/circular-dependency-prevention-context.yaml", + "resources_scanned": 2, + "scenario": "circular-dependency-prevention", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/conditional-resource-coupling-nocontext.yaml", + "resources_scanned": 5, + "scenario": "conditional-resource-coupling", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/conditional-resource-coupling-context.yaml", + "resources_scanned": 5, + "scenario": "conditional-resource-coupling", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cost-allocation-team-budget-nocontext.yaml", + "resources_scanned": 3, + "scenario": "cost-allocation-team-budget", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cost-allocation-team-budget-context.yaml", + "resources_scanned": 3, + "scenario": "cost-allocation-team-budget", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cross-stack-reference-safety-nocontext.yaml", + "resources_scanned": 2, + "scenario": "cross-stack-reference-safety", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cross-stack-reference-safety-context.yaml", + "resources_scanned": 2, + "scenario": "cross-stack-reference-safety", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/custom-naming-convention-violation-nocontext.yaml", + "resources_scanned": 3, + "scenario": "custom-naming-convention-violation", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/custom-naming-convention-violation-context.yaml", + "resources_scanned": 3, + "scenario": "custom-naming-convention-violation", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/deployment-window-restriction-nocontext.yaml", + "resources_scanned": 2, + "scenario": "deployment-window-restriction", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/deployment-window-restriction-context.yaml", + "resources_scanned": 2, + "scenario": "deployment-window-restriction", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/drift-detection-annotation-nocontext.yaml", + "resources_scanned": 1, + "scenario": "drift-detection-annotation", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/drift-detection-annotation-context.yaml", + "resources_scanned": 1, + "scenario": "drift-detection-annotation", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/environment-parameter-propagation-nocontext.yaml", + "resources_scanned": 3, + "scenario": "environment-parameter-propagation", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/environment-parameter-propagation-context.yaml", + "resources_scanned": 3, + "scenario": "environment-parameter-propagation", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/failover-primary-designation-nocontext.yaml", + "resources_scanned": 2, + "scenario": "failover-primary-designation", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/failover-primary-designation-context.yaml", + "resources_scanned": 2, + "scenario": "failover-primary-designation", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/flag-unmanaged-nocontext.yaml", + "resources_scanned": 2, + "scenario": "flag-unmanaged", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/flag-unmanaged-context.yaml", + "resources_scanned": 2, + "scenario": "flag-unmanaged", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/iam-permission-boundary-respect-nocontext.yaml", + "resources_scanned": 2, + "scenario": "iam-permission-boundary-respect", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/iam-permission-boundary-respect-context.yaml", + "resources_scanned": 2, + "scenario": "iam-permission-boundary-respect", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/inter-stack-ordering-dependency-nocontext.yaml", + "resources_scanned": 4, + "scenario": "inter-stack-ordering-dependency", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/inter-stack-ordering-dependency-context.yaml", + "resources_scanned": 4, + "scenario": "inter-stack-ordering-dependency", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/internal-sla-timeout-coupling-nocontext.yaml", + "resources_scanned": 3, + "scenario": "internal-sla-timeout-coupling", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/internal-sla-timeout-coupling-context.yaml", + "resources_scanned": 3, + "scenario": "internal-sla-timeout-coupling", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/lambda-layer-version-pinning-nocontext.yaml", + "resources_scanned": 2, + "scenario": "lambda-layer-version-pinning", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/lambda-layer-version-pinning-context.yaml", + "resources_scanned": 2, + "scenario": "lambda-layer-version-pinning", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/max-memory-budget-constraint-nocontext.yaml", + "resources_scanned": 3, + "scenario": "max-memory-budget-constraint", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/max-memory-budget-constraint-context.yaml", + "resources_scanned": 3, + "scenario": "max-memory-budget-constraint", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/persist-context-nocontext.yaml", + "resources_scanned": 3, + "scenario": "persist-context", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/persist-context-context.yaml", + "resources_scanned": 3, + "scenario": "persist-context", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/reserved-cidr-block-nocontext.yaml", + "resources_scanned": 3, + "scenario": "reserved-cidr-block", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/reserved-cidr-block-context.yaml", + "resources_scanned": 3, + "scenario": "reserved-cidr-block", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/resource-limit-awareness-nocontext.yaml", + "resources_scanned": 6, + "scenario": "resource-limit-awareness", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/resource-limit-awareness-context.yaml", + "resources_scanned": 6, + "scenario": "resource-limit-awareness", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/respect-constraint-nocontext.yaml", + "resources_scanned": 3, + "scenario": "respect-constraint", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/respect-constraint-context.yaml", + "resources_scanned": 3, + "scenario": "respect-constraint", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/retain-deletion-policy-nocontext.yaml", + "resources_scanned": 3, + "scenario": "retain-deletion-policy", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/retain-deletion-policy-context.yaml", + "resources_scanned": 3, + "scenario": "retain-deletion-policy", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/security-group-blast-radius-nocontext.yaml", + "resources_scanned": 5, + "scenario": "security-group-blast-radius", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/security-group-blast-radius-context.yaml", + "resources_scanned": 5, + "scenario": "security-group-blast-radius", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/stack-output-dependency-chain-nocontext.yaml", + "resources_scanned": 2, + "scenario": "stack-output-dependency-chain", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/stack-output-dependency-chain-context.yaml", + "resources_scanned": 2, + "scenario": "stack-output-dependency-chain", + "status": "ok", + "variant": "context", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/tag-propagation-compliance-nocontext.yaml", + "resources_scanned": 2, + "scenario": "tag-propagation-compliance", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/tag-propagation-compliance-context.yaml", + "resources_scanned": 2, + "scenario": "tag-propagation-compliance", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-policy-respect-nocontext.yaml", + "resources_scanned": 2, + "scenario": "update-policy-respect", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-policy-respect-context.yaml", + "resources_scanned": 2, + "scenario": "update-policy-respect", + "status": "ok", + "variant": "context", + "w9100_count": 0 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-replacement-warning-nocontext.yaml", + "resources_scanned": 2, + "scenario": "update-replacement-warning", + "status": "ok", + "variant": "nocontext", + "w9100_count": 1 + }, + { + "error_message": "", + "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-replacement-warning-context.yaml", + "resources_scanned": 2, + "scenario": "update-replacement-warning", + "status": "ok", + "variant": "context", + "w9100_count": 0 + } +] \ No newline at end of file diff --git a/scripts/bench_w9100.py b/scripts/bench_w9100.py new file mode 100644 index 00000000..2e545fc3 --- /dev/null +++ b/scripts/bench_w9100.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +"""Benchmark for the W9100 missing-context diagnostic. + +Runs cfn-validate against every (nocontext, context) fixture pair in the +CfnCloudContextPOCs repo and measures whether the diagnostic discriminates: + +* nocontext fixtures should emit >= 1 W9100 per resource (high counts) +* context fixtures should emit 0 W9100 + +Output mirrors the CfnCloudContextPOCs bench harness style: a markdown +report with overall scores, per-fixture breakdown, and a methodology section. +The report is deterministic — given the same fixtures, two runs produce +identical output. + +Usage: + python3 bench_w9100.py \\ + --cfn-validate /Volumes/workplace/nv/src/target/debug/cfn-validate \\ + --fixtures /Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures \\ + --out out_w9100/ + +The script exits non-zero if any context fixture emits W9100 (false positive) +or if any nocontext fixture emits zero W9100 (false negative). +""" +import argparse +import json +import re +import subprocess +import sys +from collections import defaultdict +from dataclasses import dataclass +from pathlib import Path + +RULE_ID = "W9100" + + +@dataclass +class FixtureResult: + scenario: str # paired stem, e.g. "respect-constraint" + variant: str # "nocontext" | "context" + fixture_path: str + resources_scanned: int + w9100_count: int + status: str # "ok" | "error" + error_message: str = "" + + +def discover_pairs(fixtures_dir: Path) -> dict[str, dict[str, Path]]: + """Find every fixture with a -nocontext.yaml or -context.yaml suffix and + pair them by scenario stem. + + Returns: { scenario_stem: { "nocontext": Path, "context": Path } } + Only complete pairs (both variants present) are returned. + """ + pairs: dict[str, dict[str, Path]] = defaultdict(dict) + for path in sorted(fixtures_dir.glob("*.yaml")): + name = path.stem + for variant in ("nocontext", "context"): + suffix = f"-{variant}" + if name.endswith(suffix): + scenario = name[: -len(suffix)] + pairs[scenario][variant] = path + break + return {s: v for s, v in pairs.items() if "nocontext" in v and "context" in v} + + +def run_cfn_validate(cfn_validate: Path, fixture: Path) -> FixtureResult: + """Invoke cfn-validate on a single fixture, count W9100 diagnostics.""" + cmd = [str(cfn_validate), str(fixture), "--include-ids", RULE_ID, "--format", "standard"] + try: + proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60) + except subprocess.TimeoutExpired: + return FixtureResult( + scenario="", variant="", fixture_path=str(fixture), + resources_scanned=0, w9100_count=0, status="error", + error_message="timeout after 60s", + ) + if proc.returncode not in (0, 1): + # 0 = clean, 1 = warnings/errors found, 2 = usage error + return FixtureResult( + scenario="", variant="", fixture_path=str(fixture), + resources_scanned=0, w9100_count=0, status="error", + error_message=f"exit {proc.returncode}: {proc.stderr.strip()[:200]}", + ) + try: + report = json.loads(proc.stdout) + except json.JSONDecodeError as e: + return FixtureResult( + scenario="", variant="", fixture_path=str(fixture), + resources_scanned=0, w9100_count=0, status="error", + error_message=f"invalid JSON output: {e}", + ) + diagnostics = report.get("diagnostics", []) + count = sum(1 for d in diagnostics if d.get("ruleId") == RULE_ID) + return FixtureResult( + scenario="", variant="", fixture_path=str(fixture), + resources_scanned=int(report.get("metadata", {}).get("resourcesScanned", 0)), + w9100_count=count, status="ok", + ) + + +def fmt_pct(num: float) -> str: + return f"{num * 100:.2f}%" + + +def write_report(out_dir: Path, results: list[FixtureResult]) -> tuple[int, int]: + """Render the benchmark report. Returns (false_negatives, false_positives). + + The W9100 diagnostic is per-template — at most one finding per fixture. + Discrimination is therefore measured at the fixture level: + - nocontext fixture should emit 1 W9100 + - context fixture should emit 0 W9100 + """ + out_dir.mkdir(parents=True, exist_ok=True) + + by_scenario: dict[str, dict[str, FixtureResult]] = defaultdict(dict) + for r in results: + by_scenario[r.scenario][r.variant] = r + + nocontext_results = [r for r in results if r.variant == "nocontext" and r.status == "ok"] + context_results = [r for r in results if r.variant == "context" and r.status == "ok"] + + def fixture_flag_rate(rs: list[FixtureResult]) -> float: + if not rs: + return 0.0 + flagged = sum(1 for r in rs if r.w9100_count > 0) + return flagged / len(rs) + + nocontext_rate = fixture_flag_rate(nocontext_results) + context_rate = fixture_flag_rate(context_results) + discrimination_delta = nocontext_rate - context_rate + + # The W9100 diagnostic now fires at the template level (max 1 per fixture). + # - false_negative: nocontext fixture emits 0 W9100 (missed a context-less template) + # - false_positive: context fixture emits >=1 W9100 (flagged a template that has context) + false_negatives = sum(1 for r in nocontext_results if r.w9100_count == 0) + false_positives = sum(1 for r in context_results if r.w9100_count > 0) + + lines: list[str] = [] + lines.append("# W9100 Missing-Context Diagnostic Benchmark\n") + lines.append("## Overall Discrimination\n") + lines.append("| Variant | Fixtures | Fixtures Flagged | Flag Rate |") + lines.append("|---------|----------|------------------|-----------|") + nocontext_flagged = sum(1 for r in nocontext_results if r.w9100_count > 0) + context_flagged = sum(1 for r in context_results if r.w9100_count > 0) + lines.append( + f"| nocontext | {len(nocontext_results)} | {nocontext_flagged} | " + f"{fmt_pct(nocontext_rate)} |" + ) + lines.append( + f"| context | {len(context_results)} | {context_flagged} | " + f"{fmt_pct(context_rate)} |" + ) + lines.append("") + lines.append(f"**Discrimination delta:** {fmt_pct(discrimination_delta)} (nocontext flag rate − context flag rate)") + lines.append("") + + lines.append("## Correctness\n") + lines.append(f"- False negatives (nocontext fixture emits 0 W9100): **{false_negatives}** — must be 0") + lines.append(f"- False positives (context fixture emits W9100): **{false_positives}** — must be 0; context at the template level OR on any resource satisfies the check") + lines.append("") + if false_negatives == 0 and false_positives == 0: + lines.append("✅ Diagnostic discriminates perfectly across all fixture pairs.") + else: + lines.append("❌ Diagnostic does not discriminate cleanly — see per-fixture breakdown.") + lines.append("") + + lines.append("## Per-Scenario Breakdown\n") + lines.append("| Scenario | nocontext W9100 | context W9100 | Discriminates |") + lines.append("|----------|-----------------|---------------|---------------|") + for scenario in sorted(by_scenario.keys()): + nc = by_scenario[scenario].get("nocontext") + ct = by_scenario[scenario].get("context") + nc_count = f"{nc.w9100_count}" if nc and nc.status == "ok" else "ERR" + ct_count = f"{ct.w9100_count}" if ct and ct.status == "ok" else "ERR" + discriminates = "✓" if ( + nc and ct and nc.status == "ok" and ct.status == "ok" + and nc.w9100_count >= 1 and ct.w9100_count == 0 + ) else "✗" + lines.append( + f"| {scenario} | {nc_count} | {ct_count} | {discriminates} |" + ) + lines.append("") + + lines.append("## Methodology\n") + lines.append( + "Every fixture pair `-nocontext.yaml` / `-context.yaml` " + "is run through the cfn-validate CLI with `--include-ids W9100` so only the " + "missing-context diagnostic is reported. The diagnostic fires at most once " + "per template: it emits a single W9100 warning when neither the top-level " + "`Metadata.Context` block nor any resource's `Metadata.Context` carries " + "design intent (`why`, `decisions`, `constraints`, `mutability`, or " + "`metricsGuidance` with a non-empty value)." + ) + lines.append("") + lines.append( + "**Expected behavior.** A fixture in the nocontext arm has no Metadata.Context " + "anywhere, so the diagnostic should fire exactly once. A fixture in the " + "context arm has Metadata.Context at the template level, on at least one " + "resource, or both — so the diagnostic should not fire at all. Clean " + "discrimination is `100% (nocontext) → 0% (context)`." + ) + lines.append("") + lines.append( + "**What this benchmark does NOT measure.** This is a static-correctness check " + "on the diagnostic itself — not an agent-behavior benchmark. It answers " + "\"does the diagnostic distinguish present-vs-absent context?\", not \"does " + "the diagnostic feedback cause downstream tooling to add context?\". The " + "latter requires running the CfnCloudContextPOCs harness with a " + "validation-feedback loop wired in." + ) + lines.append("") + + lines.append("## Errors\n") + error_results = [r for r in results if r.status != "ok"] + if not error_results: + lines.append("No fixture failed to validate.\n") + else: + lines.append("| Fixture | Error |") + lines.append("|---------|-------|") + for r in error_results: + lines.append(f"| {r.fixture_path} | {r.error_message} |") + lines.append("") + + report_path = out_dir / "report.md" + report_path.write_text("\n".join(lines)) + + raw = [ + { + "scenario": r.scenario, "variant": r.variant, + "fixture_path": r.fixture_path, + "resources_scanned": r.resources_scanned, + "w9100_count": r.w9100_count, + "status": r.status, + "error_message": r.error_message, + } + for r in results + ] + (out_dir / "results.json").write_text(json.dumps(raw, indent=2, sort_keys=True)) + + return false_negatives, false_positives + + +def main(): + parser = argparse.ArgumentParser(description="W9100 missing-context diagnostic benchmark") + parser.add_argument("--cfn-validate", required=True, type=Path, help="Path to cfn-validate binary") + parser.add_argument("--fixtures", required=True, type=Path, help="Directory of CFN fixtures (paired -nocontext/-context)") + parser.add_argument("--out", default=Path("out_w9100"), type=Path, help="Output directory") + args = parser.parse_args() + + if not args.cfn_validate.exists(): + print(f"ERROR: cfn-validate binary not found at {args.cfn_validate}", file=sys.stderr) + sys.exit(2) + if not args.fixtures.is_dir(): + print(f"ERROR: fixtures dir not found at {args.fixtures}", file=sys.stderr) + sys.exit(2) + + pairs = discover_pairs(args.fixtures) + if not pairs: + print(f"ERROR: no -nocontext/-context fixture pairs in {args.fixtures}", file=sys.stderr) + sys.exit(2) + print(f"Discovered {len(pairs)} fixture pairs.") + + results: list[FixtureResult] = [] + for scenario in sorted(pairs.keys()): + for variant in ("nocontext", "context"): + fixture = pairs[scenario][variant] + print(f" RUN {scenario}/{variant}...", end=" ", flush=True) + r = run_cfn_validate(args.cfn_validate, fixture) + r.scenario = scenario + r.variant = variant + results.append(r) + print(f"resources={r.resources_scanned} W9100={r.w9100_count} [{r.status}]") + + fn_count, fp_count = write_report(args.out, results) + print(f"\nReport written to {args.out / 'report.md'}") + print(f"False negatives: {fn_count} | False positives: {fp_count}") + sys.exit(0 if (fn_count == 0 and fp_count == 0) else 1) + + +if __name__ == "__main__": + main() diff --git a/src/rules/src/registry.rs b/src/rules/src/registry.rs index e25a42a7..efd0a3a1 100644 --- a/src/rules/src/registry.rs +++ b/src/rules/src/registry.rs @@ -1768,6 +1768,12 @@ pub const RULE_REGISTRY: &[RuleDefinition] = &[ description: "VirtualName is ignored when Ebs is specified", origin: RuleOrigin::CfnLint, }, + RuleDefinition { + id: "W9100", + category: Category::BestPractice, + description: "Template has no Metadata.Context block at the template level or on any resource", + 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..0adcc709 --- /dev/null +++ b/src/validation-engine/src/context_check.rs @@ -0,0 +1,290 @@ +//! Diagnostic W9100 — flags templates that lack `Metadata.Context` design +//! intent at every level. +//! +//! Context can be expressed at two scopes: +//! +//! 1. **Template-level** — top-level `Metadata.Context` documenting stack-wide +//! intent (what the stack is, schema version, cross-resource invariants). +//! 2. **Per-resource** — each resource's `Metadata.Context` documenting why +//! that specific resource exists and any constraints that govern it. +//! +//! A template is considered to carry design intent if **any** of its resources +//! has meaningful Context **or** the template itself has meaningful Context at +//! the top level. The diagnostic fires exactly once when context is missing +//! at every level — not per resource. +//! +//! "Meaningful" Context means a non-empty `Context` object containing at least +//! one of the recognized fields (`why`, `decisions`, `constraints`, +//! `mutability`, `metricsGuidance`) with a non-empty value. + +use diagnostics::Diagnostic; +use template_model::SemanticModel; + +use crate::engine::make_resource_diagnostic; + +const RULE_ID: &str = "W9100"; + +/// The minimal set of Context fields that count as "design intent present". +const RECOGNIZED_CONTEXT_FIELDS: &[&str] = + &["why", "decisions", "constraints", "mutability", "metricsGuidance"]; + +/// Returns true when at least one recognized field exists and carries a +/// non-empty value (non-empty string, non-empty array, non-empty object, +/// non-null primitive). +fn has_meaningful_context(metadata: Option<&serde_json::Value>) -> bool { + let metadata = match metadata { + Some(serde_json::Value::Object(m)) => m, + _ => return false, + }; + let context = match metadata.get("Context") { + Some(serde_json::Value::Object(c)) => c, + _ => return false, + }; + if context.is_empty() { + return false; + } + RECOGNIZED_CONTEXT_FIELDS.iter().any(|field| { + context + .get(*field) + .map(|v| match v { + serde_json::Value::Null => false, + serde_json::Value::String(s) => !s.trim().is_empty(), + serde_json::Value::Array(a) => !a.is_empty(), + serde_json::Value::Object(o) => !o.is_empty(), + serde_json::Value::Bool(_) | serde_json::Value::Number(_) => true, + }) + .unwrap_or(false) + }) +} + +/// True when the top-level template `Metadata.Context` carries design intent. +fn template_has_context(model: &SemanticModel) -> bool { + has_meaningful_context(model.template_metadata.as_ref()) +} + +/// True when at least one resource has a meaningful `Metadata.Context`. +fn any_resource_has_context(model: &SemanticModel) -> bool { + model.resources.values().any(|r| has_meaningful_context(r.metadata.as_deref())) +} + +/// Emits a single W9100 diagnostic when neither the template nor any resource +/// carries meaningful design-intent metadata. Returns an empty vector when +/// context is present at any level. +pub fn check_missing_context(model: &SemanticModel) -> Vec { + if template_has_context(model) || any_resource_has_context(model) { + return Vec::new(); + } + let message = + "Template is missing Metadata.Context. No design intent is documented at the template \ + level or on any resource." + .to_string(); + let suggested_fix = "Add a Metadata.Context block with a 'why' field at the template level, \ +on at least one resource, or both. Recognized fields: why (required), constraints (array), \ +decisions (array), mutability (map), metricsGuidance (string).\n\n\ +Example - template level:\n\ +\n\ + Metadata:\n \ + Context:\n \ + why: \"Event-processing pipeline for the orders domain\"\n\ +\n\ +Example - per resource:\n\ +\n\ + Resources:\n \ + ProcessorFunction:\n \ + Type: AWS::Lambda::Function\n \ + Metadata:\n \ + Context:\n \ + why: \"Processes incoming SQS messages\"\n \ + constraints:\n \ + - \"Timeout must be >= 45s for P99 processing\"\n \ + Properties: { ... }"; + // Empty resource_id makes make_resource_diagnostic resolve to a section-level + // span and omit the resource attachment, so the diagnostic surfaces against + // the template rather than any single resource. + vec![make_resource_diagnostic(RULE_ID, &message, model, "", "", Some(suggested_fix))] +} + +#[cfg(test)] +mod tests { + use super::*; + use serde_json::json; + + // ---------- has_meaningful_context unit tests ---------- + + #[test] + fn missing_metadata_is_not_meaningful() { + assert!(!has_meaningful_context(None)); + } + + #[test] + fn metadata_without_context_is_not_meaningful() { + let m = json!({"Other": {"k": "v"}}); + assert!(!has_meaningful_context(Some(&m))); + } + + #[test] + fn empty_context_is_not_meaningful() { + let m = json!({"Context": {}}); + assert!(!has_meaningful_context(Some(&m))); + } + + #[test] + fn context_with_empty_why_is_not_meaningful() { + let m = json!({"Context": {"why": ""}}); + assert!(!has_meaningful_context(Some(&m))); + } + + #[test] + fn context_with_only_unknown_field_is_not_meaningful() { + let m = json!({"Context": {"randomField": "value"}}); + assert!(!has_meaningful_context(Some(&m))); + } + + #[test] + fn context_with_nonempty_why_is_meaningful() { + let m = json!({"Context": {"why": "Buffers events for async processing"}}); + assert!(has_meaningful_context(Some(&m))); + } + + #[test] + fn context_with_nonempty_constraints_is_meaningful() { + let m = json!({"Context": {"constraints": ["VisibilityTimeout >= 3x function timeout"]}}); + assert!(has_meaningful_context(Some(&m))); + } + + #[test] + fn empty_constraints_alone_is_not_meaningful() { + let m = json!({"Context": {"constraints": []}}); + assert!(!has_meaningful_context(Some(&m))); + } + + // ---------- check_missing_context end-to-end tests ---------- + + #[test] + fn fires_once_when_template_and_all_resources_lack_context() { + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a + BucketB: + Type: AWS::S3::Bucket + Properties: + BucketName: b +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + assert_eq!(diags.len(), 1, "expected exactly one diagnostic, got {}", diags.len()); + assert_eq!(diags[0].rule_id, "W9100"); + assert!(diags[0].resource.is_none(), "template-level diagnostic should not target a specific resource"); + } + + #[test] + fn does_not_fire_when_one_resource_has_context() { + // Even partial annotation (one resource out of three) is enough to satisfy the check. + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a + BucketB: + Type: AWS::S3::Bucket + Metadata: + Context: + why: "Audit log archive - retention required for compliance" + Properties: + BucketName: b + BucketC: + Type: AWS::S3::Bucket + Properties: + BucketName: c +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + assert!(diags.is_empty(), "expected zero diagnostics, got {:?}", diags); + } + + #[test] + fn does_not_fire_when_template_level_context_present() { + // No resource has Context but the template top-level does — should not fire. + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Metadata: + Context: + why: "Event-processing pipeline for the orders domain" +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + assert!(diags.is_empty(), "expected zero diagnostics with template-level Context, got {:?}", diags); + } + + #[test] + fn empty_template_context_does_not_satisfy_check() { + // Top-level Metadata.Context exists but is empty — should still fire. + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Metadata: + Context: {} +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + assert_eq!(diags.len(), 1, "empty template-level Context should not satisfy the check"); + } + + #[test] + fn diagnostic_message_does_not_mention_ai_agents() { + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + let combined = format!( + "{} {}", + diags[0].message, + diags[0].suggested_fix.as_deref().unwrap_or("") + ); + let lc = combined.to_lowercase(); + assert!(!lc.contains("ai "), "diagnostic must not mention 'AI ': {}", combined); + assert!(!lc.contains("agent"), "diagnostic must not mention 'agent': {}", combined); + } + + #[test] + fn suggested_fix_contains_concrete_example() { + let yaml = br#" +AWSTemplateFormatVersion: "2010-09-09" +Resources: + BucketA: + Type: AWS::S3::Bucket + Properties: + BucketName: a +"#; + let model = SemanticModel::from_bytes(yaml).expect("model parses"); + let diags = check_missing_context(&model); + let fix = diags[0].suggested_fix.as_deref().expect("suggested_fix should be set"); + // Must show the shape at both scopes so a reader can copy-paste either one. + assert!(fix.contains("Metadata:"), "fix should show Metadata block: {}", fix); + assert!(fix.contains("Context:"), "fix should show Context key: {}", fix); + assert!(fix.contains("why:"), "fix should show 'why' field: {}", fix); + assert!(fix.contains("template level"), "fix should label the template-level example: {}", fix); + assert!(fix.contains("per resource"), "fix should label the per-resource example: {}", fix); + } +} diff --git a/src/validation-engine/src/engine.rs b/src/validation-engine/src/engine.rs index 9d7ba2c3..1d941c7c 100644 --- a/src/validation-engine/src/engine.rs +++ b/src/validation-engine/src/engine.rs @@ -189,6 +189,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_missing_context(&model)); all_diagnostics.extend(model.diagnostics.iter().cloned()); } diff --git a/src/validation-engine/src/lib.rs b/src/validation-engine/src/lib.rs index e3be51df..6efa6deb 100644 --- a/src/validation-engine/src/lib.rs +++ b/src/validation-engine/src/lib.rs @@ -4,6 +4,7 @@ uniffi::setup_scaffolding!(); pub mod engine; pub mod guard; pub(crate) mod step_functions; +pub mod context_check; pub use engine::{ EngineConfig, EngineType, ExternalRuleSource, ValidateConfig, ValidationEngine, ValidationError, build_rule_list, From 7f1cbe6bc4292178715481a7428ff721630ed823 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Fri, 14 Aug 2026 16:26:36 -0400 Subject: [PATCH 2/3] update --- out_w9100/report.md | 63 - out_w9100/results.json | 524 - scripts/bench_w9100.py | 281 - src/cfn-validate/tests/context_metadata.rs | 94 + src/cfn-validate/tests/golden_tests.rs | 2 +- src/data-source/build.rs | 1 + .../metadata-context-v1.schema.json | 146 + .../expected/validation_reports.json | 86698 +++++++++++++++- .../bad/W9100_context_malformed.yaml | 26 + .../templates/bad/W9100_context_missing.yaml | 11 + .../templates/good/W9100_context_valid.yaml | 47 + src/rules/src/registry.rs | 2 +- src/validation-engine/src/context_check.rs | 970 +- src/validation-engine/src/engine.rs | 6 +- src/validation-engine/src/lib.rs | 2 +- 15 files changed, 86275 insertions(+), 2598 deletions(-) delete mode 100644 out_w9100/report.md delete mode 100644 out_w9100/results.json delete mode 100644 scripts/bench_w9100.py create mode 100644 src/cfn-validate/tests/context_metadata.rs create mode 100644 src/data-source/handwritten/metadata-context-v1.schema.json create mode 100644 src/resources/templates/bad/W9100_context_malformed.yaml create mode 100644 src/resources/templates/bad/W9100_context_missing.yaml create mode 100644 src/resources/templates/good/W9100_context_valid.yaml diff --git a/out_w9100/report.md b/out_w9100/report.md deleted file mode 100644 index a95d4e52..00000000 --- a/out_w9100/report.md +++ /dev/null @@ -1,63 +0,0 @@ -# W9100 Missing-Context Diagnostic Benchmark - -## Overall Discrimination - -| Variant | Fixtures | Fixtures Flagged | Flag Rate | -|---------|----------|------------------|-----------| -| nocontext | 29 | 29 | 100.00% | -| context | 29 | 1 | 3.45% | - -**Discrimination delta:** 96.55% (nocontext flag rate − context flag rate) - -## Correctness - -- False negatives (nocontext fixture emits 0 W9100): **0** — must be 0 -- False positives (context fixture emits W9100): **1** — must be 0; context at the template level OR on any resource satisfies the check - -❌ Diagnostic does not discriminate cleanly — see per-fixture breakdown. - -## Per-Scenario Breakdown - -| Scenario | nocontext W9100 | context W9100 | Discriminates | -|----------|-----------------|---------------|---------------| -| add-dlq | 1 | 0 | ✓ | -| api-rate-limit-sharing | 1 | 0 | ✓ | -| canary-percentage-cap | 1 | 0 | ✓ | -| cfn-hook-awareness | 1 | 0 | ✓ | -| circular-dependency-prevention | 1 | 0 | ✓ | -| conditional-resource-coupling | 1 | 0 | ✓ | -| cost-allocation-team-budget | 1 | 0 | ✓ | -| cross-stack-reference-safety | 1 | 0 | ✓ | -| custom-naming-convention-violation | 1 | 0 | ✓ | -| deployment-window-restriction | 1 | 0 | ✓ | -| drift-detection-annotation | 1 | 0 | ✓ | -| environment-parameter-propagation | 1 | 0 | ✓ | -| failover-primary-designation | 1 | 0 | ✓ | -| flag-unmanaged | 1 | 0 | ✓ | -| iam-permission-boundary-respect | 1 | 0 | ✓ | -| inter-stack-ordering-dependency | 1 | 0 | ✓ | -| internal-sla-timeout-coupling | 1 | 0 | ✓ | -| lambda-layer-version-pinning | 1 | 0 | ✓ | -| max-memory-budget-constraint | 1 | 0 | ✓ | -| persist-context | 1 | 0 | ✓ | -| reserved-cidr-block | 1 | 0 | ✓ | -| resource-limit-awareness | 1 | 0 | ✓ | -| respect-constraint | 1 | 0 | ✓ | -| retain-deletion-policy | 1 | 0 | ✓ | -| security-group-blast-radius | 1 | 0 | ✓ | -| stack-output-dependency-chain | 1 | 1 | ✗ | -| tag-propagation-compliance | 1 | 0 | ✓ | -| update-policy-respect | 1 | 0 | ✓ | -| update-replacement-warning | 1 | 0 | ✓ | - -## Methodology - -Every fixture pair `-nocontext.yaml` / `-context.yaml` is run through the cfn-validate CLI with `--include-ids W9100` so only the missing-context diagnostic is reported. The diagnostic fires at most once per template: it emits a single W9100 warning when neither the top-level `Metadata.Context` block nor any resource's `Metadata.Context` carries design intent (`why`, `decisions`, `constraints`, `mutability`, or `metricsGuidance` with a non-empty value). - -**Expected behavior.** A fixture in the nocontext arm has no Metadata.Context anywhere, so the diagnostic should fire exactly once. A fixture in the context arm has Metadata.Context at the template level, on at least one resource, or both — so the diagnostic should not fire at all. Clean discrimination is `100% (nocontext) → 0% (context)`. - -**What this benchmark does NOT measure.** This is a static-correctness check on the diagnostic itself — not an agent-behavior benchmark. It answers "does the diagnostic distinguish present-vs-absent context?", not "does the diagnostic feedback cause downstream tooling to add context?". The latter requires running the CfnCloudContextPOCs harness with a validation-feedback loop wired in. - -## Errors - -No fixture failed to validate. diff --git a/out_w9100/results.json b/out_w9100/results.json deleted file mode 100644 index 2eecf637..00000000 --- a/out_w9100/results.json +++ /dev/null @@ -1,524 +0,0 @@ -[ - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/add-dlq-nocontext.yaml", - "resources_scanned": 2, - "scenario": "add-dlq", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/add-dlq-context.yaml", - "resources_scanned": 2, - "scenario": "add-dlq", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/api-rate-limit-sharing-nocontext.yaml", - "resources_scanned": 2, - "scenario": "api-rate-limit-sharing", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/api-rate-limit-sharing-context.yaml", - "resources_scanned": 2, - "scenario": "api-rate-limit-sharing", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/canary-percentage-cap-nocontext.yaml", - "resources_scanned": 3, - "scenario": "canary-percentage-cap", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/canary-percentage-cap-context.yaml", - "resources_scanned": 3, - "scenario": "canary-percentage-cap", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cfn-hook-awareness-nocontext.yaml", - "resources_scanned": 1, - "scenario": "cfn-hook-awareness", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cfn-hook-awareness-context.yaml", - "resources_scanned": 1, - "scenario": "cfn-hook-awareness", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/circular-dependency-prevention-nocontext.yaml", - "resources_scanned": 2, - "scenario": "circular-dependency-prevention", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/circular-dependency-prevention-context.yaml", - "resources_scanned": 2, - "scenario": "circular-dependency-prevention", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/conditional-resource-coupling-nocontext.yaml", - "resources_scanned": 5, - "scenario": "conditional-resource-coupling", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/conditional-resource-coupling-context.yaml", - "resources_scanned": 5, - "scenario": "conditional-resource-coupling", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cost-allocation-team-budget-nocontext.yaml", - "resources_scanned": 3, - "scenario": "cost-allocation-team-budget", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cost-allocation-team-budget-context.yaml", - "resources_scanned": 3, - "scenario": "cost-allocation-team-budget", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cross-stack-reference-safety-nocontext.yaml", - "resources_scanned": 2, - "scenario": "cross-stack-reference-safety", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/cross-stack-reference-safety-context.yaml", - "resources_scanned": 2, - "scenario": "cross-stack-reference-safety", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/custom-naming-convention-violation-nocontext.yaml", - "resources_scanned": 3, - "scenario": "custom-naming-convention-violation", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/custom-naming-convention-violation-context.yaml", - "resources_scanned": 3, - "scenario": "custom-naming-convention-violation", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/deployment-window-restriction-nocontext.yaml", - "resources_scanned": 2, - "scenario": "deployment-window-restriction", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/deployment-window-restriction-context.yaml", - "resources_scanned": 2, - "scenario": "deployment-window-restriction", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/drift-detection-annotation-nocontext.yaml", - "resources_scanned": 1, - "scenario": "drift-detection-annotation", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/drift-detection-annotation-context.yaml", - "resources_scanned": 1, - "scenario": "drift-detection-annotation", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/environment-parameter-propagation-nocontext.yaml", - "resources_scanned": 3, - "scenario": "environment-parameter-propagation", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/environment-parameter-propagation-context.yaml", - "resources_scanned": 3, - "scenario": "environment-parameter-propagation", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/failover-primary-designation-nocontext.yaml", - "resources_scanned": 2, - "scenario": "failover-primary-designation", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/failover-primary-designation-context.yaml", - "resources_scanned": 2, - "scenario": "failover-primary-designation", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/flag-unmanaged-nocontext.yaml", - "resources_scanned": 2, - "scenario": "flag-unmanaged", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/flag-unmanaged-context.yaml", - "resources_scanned": 2, - "scenario": "flag-unmanaged", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/iam-permission-boundary-respect-nocontext.yaml", - "resources_scanned": 2, - "scenario": "iam-permission-boundary-respect", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/iam-permission-boundary-respect-context.yaml", - "resources_scanned": 2, - "scenario": "iam-permission-boundary-respect", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/inter-stack-ordering-dependency-nocontext.yaml", - "resources_scanned": 4, - "scenario": "inter-stack-ordering-dependency", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/inter-stack-ordering-dependency-context.yaml", - "resources_scanned": 4, - "scenario": "inter-stack-ordering-dependency", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/internal-sla-timeout-coupling-nocontext.yaml", - "resources_scanned": 3, - "scenario": "internal-sla-timeout-coupling", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/internal-sla-timeout-coupling-context.yaml", - "resources_scanned": 3, - "scenario": "internal-sla-timeout-coupling", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/lambda-layer-version-pinning-nocontext.yaml", - "resources_scanned": 2, - "scenario": "lambda-layer-version-pinning", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/lambda-layer-version-pinning-context.yaml", - "resources_scanned": 2, - "scenario": "lambda-layer-version-pinning", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/max-memory-budget-constraint-nocontext.yaml", - "resources_scanned": 3, - "scenario": "max-memory-budget-constraint", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/max-memory-budget-constraint-context.yaml", - "resources_scanned": 3, - "scenario": "max-memory-budget-constraint", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/persist-context-nocontext.yaml", - "resources_scanned": 3, - "scenario": "persist-context", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/persist-context-context.yaml", - "resources_scanned": 3, - "scenario": "persist-context", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/reserved-cidr-block-nocontext.yaml", - "resources_scanned": 3, - "scenario": "reserved-cidr-block", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/reserved-cidr-block-context.yaml", - "resources_scanned": 3, - "scenario": "reserved-cidr-block", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/resource-limit-awareness-nocontext.yaml", - "resources_scanned": 6, - "scenario": "resource-limit-awareness", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/resource-limit-awareness-context.yaml", - "resources_scanned": 6, - "scenario": "resource-limit-awareness", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/respect-constraint-nocontext.yaml", - "resources_scanned": 3, - "scenario": "respect-constraint", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/respect-constraint-context.yaml", - "resources_scanned": 3, - "scenario": "respect-constraint", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/retain-deletion-policy-nocontext.yaml", - "resources_scanned": 3, - "scenario": "retain-deletion-policy", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/retain-deletion-policy-context.yaml", - "resources_scanned": 3, - "scenario": "retain-deletion-policy", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/security-group-blast-radius-nocontext.yaml", - "resources_scanned": 5, - "scenario": "security-group-blast-radius", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/security-group-blast-radius-context.yaml", - "resources_scanned": 5, - "scenario": "security-group-blast-radius", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/stack-output-dependency-chain-nocontext.yaml", - "resources_scanned": 2, - "scenario": "stack-output-dependency-chain", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/stack-output-dependency-chain-context.yaml", - "resources_scanned": 2, - "scenario": "stack-output-dependency-chain", - "status": "ok", - "variant": "context", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/tag-propagation-compliance-nocontext.yaml", - "resources_scanned": 2, - "scenario": "tag-propagation-compliance", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/tag-propagation-compliance-context.yaml", - "resources_scanned": 2, - "scenario": "tag-propagation-compliance", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-policy-respect-nocontext.yaml", - "resources_scanned": 2, - "scenario": "update-policy-respect", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-policy-respect-context.yaml", - "resources_scanned": 2, - "scenario": "update-policy-respect", - "status": "ok", - "variant": "context", - "w9100_count": 0 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-replacement-warning-nocontext.yaml", - "resources_scanned": 2, - "scenario": "update-replacement-warning", - "status": "ok", - "variant": "nocontext", - "w9100_count": 1 - }, - { - "error_message": "", - "fixture_path": "/Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures/update-replacement-warning-context.yaml", - "resources_scanned": 2, - "scenario": "update-replacement-warning", - "status": "ok", - "variant": "context", - "w9100_count": 0 - } -] \ No newline at end of file diff --git a/scripts/bench_w9100.py b/scripts/bench_w9100.py deleted file mode 100644 index 2e545fc3..00000000 --- a/scripts/bench_w9100.py +++ /dev/null @@ -1,281 +0,0 @@ -#!/usr/bin/env python3 -"""Benchmark for the W9100 missing-context diagnostic. - -Runs cfn-validate against every (nocontext, context) fixture pair in the -CfnCloudContextPOCs repo and measures whether the diagnostic discriminates: - -* nocontext fixtures should emit >= 1 W9100 per resource (high counts) -* context fixtures should emit 0 W9100 - -Output mirrors the CfnCloudContextPOCs bench harness style: a markdown -report with overall scores, per-fixture breakdown, and a methodology section. -The report is deterministic — given the same fixtures, two runs produce -identical output. - -Usage: - python3 bench_w9100.py \\ - --cfn-validate /Volumes/workplace/nv/src/target/debug/cfn-validate \\ - --fixtures /Volumes/workplace/context/src/CfnCloudContextPOCs/fixtures \\ - --out out_w9100/ - -The script exits non-zero if any context fixture emits W9100 (false positive) -or if any nocontext fixture emits zero W9100 (false negative). -""" -import argparse -import json -import re -import subprocess -import sys -from collections import defaultdict -from dataclasses import dataclass -from pathlib import Path - -RULE_ID = "W9100" - - -@dataclass -class FixtureResult: - scenario: str # paired stem, e.g. "respect-constraint" - variant: str # "nocontext" | "context" - fixture_path: str - resources_scanned: int - w9100_count: int - status: str # "ok" | "error" - error_message: str = "" - - -def discover_pairs(fixtures_dir: Path) -> dict[str, dict[str, Path]]: - """Find every fixture with a -nocontext.yaml or -context.yaml suffix and - pair them by scenario stem. - - Returns: { scenario_stem: { "nocontext": Path, "context": Path } } - Only complete pairs (both variants present) are returned. - """ - pairs: dict[str, dict[str, Path]] = defaultdict(dict) - for path in sorted(fixtures_dir.glob("*.yaml")): - name = path.stem - for variant in ("nocontext", "context"): - suffix = f"-{variant}" - if name.endswith(suffix): - scenario = name[: -len(suffix)] - pairs[scenario][variant] = path - break - return {s: v for s, v in pairs.items() if "nocontext" in v and "context" in v} - - -def run_cfn_validate(cfn_validate: Path, fixture: Path) -> FixtureResult: - """Invoke cfn-validate on a single fixture, count W9100 diagnostics.""" - cmd = [str(cfn_validate), str(fixture), "--include-ids", RULE_ID, "--format", "standard"] - try: - proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60) - except subprocess.TimeoutExpired: - return FixtureResult( - scenario="", variant="", fixture_path=str(fixture), - resources_scanned=0, w9100_count=0, status="error", - error_message="timeout after 60s", - ) - if proc.returncode not in (0, 1): - # 0 = clean, 1 = warnings/errors found, 2 = usage error - return FixtureResult( - scenario="", variant="", fixture_path=str(fixture), - resources_scanned=0, w9100_count=0, status="error", - error_message=f"exit {proc.returncode}: {proc.stderr.strip()[:200]}", - ) - try: - report = json.loads(proc.stdout) - except json.JSONDecodeError as e: - return FixtureResult( - scenario="", variant="", fixture_path=str(fixture), - resources_scanned=0, w9100_count=0, status="error", - error_message=f"invalid JSON output: {e}", - ) - diagnostics = report.get("diagnostics", []) - count = sum(1 for d in diagnostics if d.get("ruleId") == RULE_ID) - return FixtureResult( - scenario="", variant="", fixture_path=str(fixture), - resources_scanned=int(report.get("metadata", {}).get("resourcesScanned", 0)), - w9100_count=count, status="ok", - ) - - -def fmt_pct(num: float) -> str: - return f"{num * 100:.2f}%" - - -def write_report(out_dir: Path, results: list[FixtureResult]) -> tuple[int, int]: - """Render the benchmark report. Returns (false_negatives, false_positives). - - The W9100 diagnostic is per-template — at most one finding per fixture. - Discrimination is therefore measured at the fixture level: - - nocontext fixture should emit 1 W9100 - - context fixture should emit 0 W9100 - """ - out_dir.mkdir(parents=True, exist_ok=True) - - by_scenario: dict[str, dict[str, FixtureResult]] = defaultdict(dict) - for r in results: - by_scenario[r.scenario][r.variant] = r - - nocontext_results = [r for r in results if r.variant == "nocontext" and r.status == "ok"] - context_results = [r for r in results if r.variant == "context" and r.status == "ok"] - - def fixture_flag_rate(rs: list[FixtureResult]) -> float: - if not rs: - return 0.0 - flagged = sum(1 for r in rs if r.w9100_count > 0) - return flagged / len(rs) - - nocontext_rate = fixture_flag_rate(nocontext_results) - context_rate = fixture_flag_rate(context_results) - discrimination_delta = nocontext_rate - context_rate - - # The W9100 diagnostic now fires at the template level (max 1 per fixture). - # - false_negative: nocontext fixture emits 0 W9100 (missed a context-less template) - # - false_positive: context fixture emits >=1 W9100 (flagged a template that has context) - false_negatives = sum(1 for r in nocontext_results if r.w9100_count == 0) - false_positives = sum(1 for r in context_results if r.w9100_count > 0) - - lines: list[str] = [] - lines.append("# W9100 Missing-Context Diagnostic Benchmark\n") - lines.append("## Overall Discrimination\n") - lines.append("| Variant | Fixtures | Fixtures Flagged | Flag Rate |") - lines.append("|---------|----------|------------------|-----------|") - nocontext_flagged = sum(1 for r in nocontext_results if r.w9100_count > 0) - context_flagged = sum(1 for r in context_results if r.w9100_count > 0) - lines.append( - f"| nocontext | {len(nocontext_results)} | {nocontext_flagged} | " - f"{fmt_pct(nocontext_rate)} |" - ) - lines.append( - f"| context | {len(context_results)} | {context_flagged} | " - f"{fmt_pct(context_rate)} |" - ) - lines.append("") - lines.append(f"**Discrimination delta:** {fmt_pct(discrimination_delta)} (nocontext flag rate − context flag rate)") - lines.append("") - - lines.append("## Correctness\n") - lines.append(f"- False negatives (nocontext fixture emits 0 W9100): **{false_negatives}** — must be 0") - lines.append(f"- False positives (context fixture emits W9100): **{false_positives}** — must be 0; context at the template level OR on any resource satisfies the check") - lines.append("") - if false_negatives == 0 and false_positives == 0: - lines.append("✅ Diagnostic discriminates perfectly across all fixture pairs.") - else: - lines.append("❌ Diagnostic does not discriminate cleanly — see per-fixture breakdown.") - lines.append("") - - lines.append("## Per-Scenario Breakdown\n") - lines.append("| Scenario | nocontext W9100 | context W9100 | Discriminates |") - lines.append("|----------|-----------------|---------------|---------------|") - for scenario in sorted(by_scenario.keys()): - nc = by_scenario[scenario].get("nocontext") - ct = by_scenario[scenario].get("context") - nc_count = f"{nc.w9100_count}" if nc and nc.status == "ok" else "ERR" - ct_count = f"{ct.w9100_count}" if ct and ct.status == "ok" else "ERR" - discriminates = "✓" if ( - nc and ct and nc.status == "ok" and ct.status == "ok" - and nc.w9100_count >= 1 and ct.w9100_count == 0 - ) else "✗" - lines.append( - f"| {scenario} | {nc_count} | {ct_count} | {discriminates} |" - ) - lines.append("") - - lines.append("## Methodology\n") - lines.append( - "Every fixture pair `-nocontext.yaml` / `-context.yaml` " - "is run through the cfn-validate CLI with `--include-ids W9100` so only the " - "missing-context diagnostic is reported. The diagnostic fires at most once " - "per template: it emits a single W9100 warning when neither the top-level " - "`Metadata.Context` block nor any resource's `Metadata.Context` carries " - "design intent (`why`, `decisions`, `constraints`, `mutability`, or " - "`metricsGuidance` with a non-empty value)." - ) - lines.append("") - lines.append( - "**Expected behavior.** A fixture in the nocontext arm has no Metadata.Context " - "anywhere, so the diagnostic should fire exactly once. A fixture in the " - "context arm has Metadata.Context at the template level, on at least one " - "resource, or both — so the diagnostic should not fire at all. Clean " - "discrimination is `100% (nocontext) → 0% (context)`." - ) - lines.append("") - lines.append( - "**What this benchmark does NOT measure.** This is a static-correctness check " - "on the diagnostic itself — not an agent-behavior benchmark. It answers " - "\"does the diagnostic distinguish present-vs-absent context?\", not \"does " - "the diagnostic feedback cause downstream tooling to add context?\". The " - "latter requires running the CfnCloudContextPOCs harness with a " - "validation-feedback loop wired in." - ) - lines.append("") - - lines.append("## Errors\n") - error_results = [r for r in results if r.status != "ok"] - if not error_results: - lines.append("No fixture failed to validate.\n") - else: - lines.append("| Fixture | Error |") - lines.append("|---------|-------|") - for r in error_results: - lines.append(f"| {r.fixture_path} | {r.error_message} |") - lines.append("") - - report_path = out_dir / "report.md" - report_path.write_text("\n".join(lines)) - - raw = [ - { - "scenario": r.scenario, "variant": r.variant, - "fixture_path": r.fixture_path, - "resources_scanned": r.resources_scanned, - "w9100_count": r.w9100_count, - "status": r.status, - "error_message": r.error_message, - } - for r in results - ] - (out_dir / "results.json").write_text(json.dumps(raw, indent=2, sort_keys=True)) - - return false_negatives, false_positives - - -def main(): - parser = argparse.ArgumentParser(description="W9100 missing-context diagnostic benchmark") - parser.add_argument("--cfn-validate", required=True, type=Path, help="Path to cfn-validate binary") - parser.add_argument("--fixtures", required=True, type=Path, help="Directory of CFN fixtures (paired -nocontext/-context)") - parser.add_argument("--out", default=Path("out_w9100"), type=Path, help="Output directory") - args = parser.parse_args() - - if not args.cfn_validate.exists(): - print(f"ERROR: cfn-validate binary not found at {args.cfn_validate}", file=sys.stderr) - sys.exit(2) - if not args.fixtures.is_dir(): - print(f"ERROR: fixtures dir not found at {args.fixtures}", file=sys.stderr) - sys.exit(2) - - pairs = discover_pairs(args.fixtures) - if not pairs: - print(f"ERROR: no -nocontext/-context fixture pairs in {args.fixtures}", file=sys.stderr) - sys.exit(2) - print(f"Discovered {len(pairs)} fixture pairs.") - - results: list[FixtureResult] = [] - for scenario in sorted(pairs.keys()): - for variant in ("nocontext", "context"): - fixture = pairs[scenario][variant] - print(f" RUN {scenario}/{variant}...", end=" ", flush=True) - r = run_cfn_validate(args.cfn_validate, fixture) - r.scenario = scenario - r.variant = variant - results.append(r) - print(f"resources={r.resources_scanned} W9100={r.w9100_count} [{r.status}]") - - fn_count, fp_count = write_report(args.out, results) - print(f"\nReport written to {args.out / 'report.md'}") - print(f"False negatives: {fn_count} | False positives: {fp_count}") - sys.exit(0 if (fn_count == 0 and fp_count == 0) else 1) - - -if __name__ == "__main__": - main() 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 17dad24e..b363fdcb 100644 --- a/src/rules/src/registry.rs +++ b/src/rules/src/registry.rs @@ -1955,7 +1955,7 @@ pub const RULE_REGISTRY: &[RuleDefinition] = &[ RuleDefinition { id: "W9100", category: Category::BestPractice, - description: "Template has no Metadata.Context block at the template level or on any resource", + description: "Validate namespaced context metadata on the template and primary resources", origin: RuleOrigin::Engine, }, ]; diff --git a/src/validation-engine/src/context_check.rs b/src/validation-engine/src/context_check.rs index 0adcc709..08f46c55 100644 --- a/src/validation-engine/src/context_check.rs +++ b/src/validation-engine/src/context_check.rs @@ -1,290 +1,816 @@ -//! Diagnostic W9100 — flags templates that lack `Metadata.Context` design -//! intent at every level. -//! -//! Context can be expressed at two scopes: -//! -//! 1. **Template-level** — top-level `Metadata.Context` documenting stack-wide -//! intent (what the stack is, schema version, cross-resource invariants). -//! 2. **Per-resource** — each resource's `Metadata.Context` documenting why -//! that specific resource exists and any constraints that govern it. -//! -//! A template is considered to carry design intent if **any** of its resources -//! has meaningful Context **or** the template itself has meaningful Context at -//! the top level. The diagnostic fires exactly once when context is missing -//! at every level — not per resource. -//! -//! "Meaningful" Context means a non-empty `Context` object containing at least -//! one of the recognized fields (`why`, `decisions`, `constraints`, -//! `mutability`, `metricsGuidance`) with a non-empty value. - -use diagnostics::Diagnostic; -use template_model::SemanticModel; - -use crate::engine::make_resource_diagnostic; +//! 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, +} -/// The minimal set of Context fields that count as "design intent present". -const RECOGNIZED_CONTEXT_FIELDS: &[&str] = - &["why", "decisions", "constraints", "mutability", "metricsGuidance"]; - -/// Returns true when at least one recognized field exists and carries a -/// non-empty value (non-empty string, non-empty array, non-empty object, -/// non-null primitive). -fn has_meaningful_context(metadata: Option<&serde_json::Value>) -> bool { - let metadata = match metadata { - Some(serde_json::Value::Object(m)) => m, - _ => return false, +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 context = match metadata.get("Context") { - Some(serde_json::Value::Object(c)) => c, - _ => return false, + let Some(context) = metadata_object.get(CONTEXT_KEY) else { + return Ok(vec![format!("No top-level Metadata.{CONTEXT_KEY} block found.")]); }; - if context.is_empty() { - return false; - } - RECOGNIZED_CONTEXT_FIELDS.iter().any(|field| { - context - .get(*field) - .map(|v| match v { - serde_json::Value::Null => false, - serde_json::Value::String(s) => !s.trim().is_empty(), - serde_json::Value::Array(a) => !a.is_empty(), - serde_json::Value::Object(o) => !o.is_empty(), - serde_json::Value::Bool(_) | serde_json::Value::Number(_) => true, - }) - .unwrap_or(false) - }) + + let violations = schema.validate(TEMPLATE_SCHEMA_DEFINITION, context)?; + Ok(format_schema_violations( + violations, + &schema.resource_fields, + "template", + "resource", + &format!("Top-level Metadata.{CONTEXT_KEY}"), + )) } -/// True when the top-level template `Metadata.Context` carries design intent. -fn template_has_context(model: &SemanticModel) -> bool { - has_meaningful_context(model.template_metadata.as_ref()) +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) } -/// True when at least one resource has a meaningful `Metadata.Context`. -fn any_resource_has_context(model: &SemanticModel) -> bool { - model.resources.values().any(|r| has_meaningful_context(r.metadata.as_deref())) +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() } -/// Emits a single W9100 diagnostic when neither the template nor any resource -/// carries meaningful design-intent metadata. Returns an empty vector when -/// context is present at any level. -pub fn check_missing_context(model: &SemanticModel) -> Vec { - if template_has_context(model) || any_resource_has_context(model) { - return Vec::new(); +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); } - let message = - "Template is missing Metadata.Context. No design intent is documented at the template \ - level or on any resource." - .to_string(); - let suggested_fix = "Add a Metadata.Context block with a 'why' field at the template level, \ -on at least one resource, or both. Recognized fields: why (required), constraints (array), \ -decisions (array), mutability (map), metricsGuidance (string).\n\n\ -Example - template level:\n\ -\n\ - Metadata:\n \ - Context:\n \ - why: \"Event-processing pipeline for the orders domain\"\n\ -\n\ -Example - per resource:\n\ -\n\ - Resources:\n \ - ProcessorFunction:\n \ - Type: AWS::Lambda::Function\n \ - Metadata:\n \ - Context:\n \ - why: \"Processes incoming SQS messages\"\n \ - constraints:\n \ - - \"Timeout must be >= 45s for P99 processing\"\n \ - Properties: { ... }"; - // Empty resource_id makes make_resource_diagnostic resolve to a section-level - // span and omit the resource attachment, so the diagnostic surfaces against - // the template rather than any single resource. - vec![make_resource_diagnostic(RULE_ID, &message, model, "", "", Some(suggested_fix))] + + 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(()) } -#[cfg(test)] -mod tests { - use super::*; - use serde_json::json; +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); + } - // ---------- has_meaningful_context unit tests ---------- + 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(()); + } - #[test] - fn missing_metadata_is_not_meaningful() { - assert!(!has_meaningful_context(None)); + 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, + }); + } + } } - #[test] - fn metadata_without_context_is_not_meaningful() { - let m = json!({"Other": {"k": "v"}}); - assert!(!has_meaningful_context(Some(&m))); + 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(()) +} - #[test] - fn empty_context_is_not_meaningful() { - let m = json!({"Context": {}}); - assert!(!has_meaningful_context(Some(&m))); +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, } +} - #[test] - fn context_with_empty_why_is_not_meaningful() { - let m = json!({"Context": {"why": ""}}); - assert!(!has_meaningful_context(Some(&m))); +fn type_description(schema_type: &str) -> String { + match schema_type { + "array" => "an array".to_string(), + "object" => "an object".to_string(), + other => format!("a {other}"), } +} - #[test] - fn context_with_only_unknown_field_is_not_meaningful() { - let m = json!({"Context": {"randomField": "value"}}); - assert!(!has_meaningful_context(Some(&m))); +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()); } - #[test] - fn context_with_nonempty_why_is_meaningful() { - let m = json!({"Context": {"why": "Buffers events for async processing"}}); - assert!(has_meaningful_context(Some(&m))); + 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(", ") + )); } +} - #[test] - fn context_with_nonempty_constraints_is_meaningful() { - let m = json!({"Context": {"constraints": ["VisibilityTimeout >= 3x function timeout"]}}); - assert!(has_meaningful_context(Some(&m))); +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 +} - #[test] - fn empty_constraints_alone_is_not_meaningful() { - let m = json!({"Context": {"constraints": []}}); - assert!(!has_meaningful_context(Some(&m))); +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; } - // ---------- check_missing_context end-to-end tests ---------- + 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 fires_once_when_template_and_all_resources_lack_context() { - let yaml = br#" -AWSTemplateFormatVersion: "2010-09-09" -Resources: - BucketA: - Type: AWS::S3::Bucket - Properties: - BucketName: a - BucketB: - Type: AWS::S3::Bucket - Properties: - BucketName: b -"#; - let model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - assert_eq!(diags.len(), 1, "expected exactly one diagnostic, got {}", diags.len()); - assert_eq!(diags[0].rule_id, "W9100"); - assert!(diags[0].resource.is_none(), "template-level diagnostic should not target a specific resource"); + 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 does_not_fire_when_one_resource_has_context() { - // Even partial annotation (one resource out of three) is enough to satisfy the check. - let yaml = br#" + fn legacy_bare_context_key_is_not_an_alias() { + let template = r#" AWSTemplateFormatVersion: "2010-09-09" +Metadata: + Context: + arch: "legacy" Resources: - BucketA: - Type: AWS::S3::Bucket - Properties: - BucketName: a - BucketB: - Type: AWS::S3::Bucket + Queue: + Type: AWS::SQS::Queue Metadata: Context: - why: "Audit log archive - retention required for compliance" - Properties: - BucketName: b - BucketC: - Type: AWS::S3::Bucket - Properties: - BucketName: c + why: "legacy" "#; - let model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - assert!(diags.is_empty(), "expected zero diagnostics, got {:?}", diags); + + 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 does_not_fire_when_template_level_context_present() { - // No resource has Context but the template top-level does — should not fire. - let yaml = br#" + fn missing_template_and_multiple_primary_resources_produce_two_diagnostics() { + let template = r#" AWSTemplateFormatVersion: "2010-09-09" -Metadata: - Context: - why: "Event-processing pipeline for the orders domain" Resources: - BucketA: + Bucket: Type: AWS::S3::Bucket - Properties: - BucketName: a + Queue: + Type: AWS::SQS::Queue "#; - let model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - assert!(diags.is_empty(), "expected zero diagnostics with template-level Context, got {:?}", diags); + + 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 empty_template_context_does_not_satisfy_check() { - // Top-level Metadata.Context exists but is empty — should still fire. - let yaml = br#" + fn malformed_fields_are_aggregated_by_scope() { + let template = r#" AWSTemplateFormatVersion: "2010-09-09" Metadata: - Context: {} + com.aws.cloudformation.Context: + arch: [not, a, string] + why: "resource-only" + ref: + - has: "missing at" Resources: - BucketA: - Type: AWS::S3::Bucket - Properties: - BucketName: a + 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 model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - assert_eq!(diags.len(), 1, "empty template-level Context should not satisfy the check"); + + 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 diagnostic_message_does_not_mention_ai_agents() { - let yaml = br#" -AWSTemplateFormatVersion: "2010-09-09" -Resources: - BucketA: - Type: AWS::S3::Bucket - Properties: - BucketName: a -"#; - let model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - let combined = format!( - "{} {}", - diags[0].message, - diags[0].suggested_fix.as_deref().unwrap_or("") + 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 lc = combined.to_lowercase(); - assert!(!lc.contains("ai "), "diagnostic must not mention 'AI ': {}", combined); - assert!(!lc.contains("agent"), "diagnostic must not mention 'agent': {}", combined); + + 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 suggested_fix_contains_concrete_example() { - let yaml = br#" + 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: - BucketA: - Type: AWS::S3::Bucket - Properties: - BucketName: a + Queue: + Type: AWS::SQS::Queue "#; - let model = SemanticModel::from_bytes(yaml).expect("model parses"); - let diags = check_missing_context(&model); - let fix = diags[0].suggested_fix.as_deref().expect("suggested_fix should be set"); - // Must show the shape at both scopes so a reader can copy-paste either one. - assert!(fix.contains("Metadata:"), "fix should show Metadata block: {}", fix); - assert!(fix.contains("Context:"), "fix should show Context key: {}", fix); - assert!(fix.contains("why:"), "fix should show 'why' field: {}", fix); - assert!(fix.contains("template level"), "fix should label the template-level example: {}", fix); - assert!(fix.contains("per resource"), "fix should label the per-resource example: {}", fix); + + 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 5f3f2414..22432619 100644 --- a/src/validation-engine/src/engine.rs +++ b/src/validation-engine/src/engine.rs @@ -264,10 +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)); -<<<<<<< HEAD - all_diagnostics.extend(crate::context_check::check_missing_context(&model)); - all_diagnostics.extend(model.diagnostics.iter().cloned()); -======= + 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 @@ -296,7 +293,6 @@ pub(crate) fn validate( .build(), ); } ->>>>>>> main } gate_sam_transform_errors(&mut all_diagnostics); diff --git a/src/validation-engine/src/lib.rs b/src/validation-engine/src/lib.rs index 76601c8a..2e65eb4f 100644 --- a/src/validation-engine/src/lib.rs +++ b/src/validation-engine/src/lib.rs @@ -1,10 +1,10 @@ #[cfg(feature = "uniffi-bindings")] uniffi::setup_scaffolding!(); +pub(crate) mod context_check; pub mod engine; pub mod guard; pub(crate) mod step_functions; -pub mod context_check; pub use engine::{ EngineConfig, EngineType, ExternalRuleSource, ValidateConfig, ValidationEngine, ValidationError, build_rule_list, From 388b4ec93a1cddb76181a44d7868665552294e38 Mon Sep 17 00:00:00 2001 From: Satyaki Ghosh Date: Thu, 8 Oct 2026 11:28:22 -0400 Subject: [PATCH 3/3] Improve context --- src/Cargo.lock | 2 + src/cfn-validate/tests/context_metadata.rs | 20 +- src/cfn-validate/tests/snapshot_tests.rs | 5 +- src/resources/Cargo.toml | 2 + .../examples/generate_validation_reports.rs | 10 +- .../expected/validation_reports1.json | 4856 +- .../expected/validation_reports2.json | 83342 +++++++--------- .../expected/validation_reports3.json | 3387 +- .../expected/validation_reports4.json | 536 +- .../expected/validation_reports5.json | 8659 +- .../expected/validation_reports6.json | 4941 +- .../expected/validation_reports7.json | 7766 +- .../expected/validation_reports8.json | 23841 +---- src/resources/src/lib.rs | 113 + ...I4010_cdk_synthesized_missing_context.json | 48 + .../cdk_synthesized_without_analytics.yaml | 18 - src/template-model/src/consts.rs | 5 - src/template-model/src/model.rs | 19 +- src/template-model/tests/integration.rs | 20 - src/validation-engine/src/context_check.rs | 14 +- src/validation-engine/src/engine.rs | 32 +- 21 files changed, 37952 insertions(+), 99684 deletions(-) create mode 100644 src/resources/templates/bad/I4010_cdk_synthesized_missing_context.json delete mode 100644 src/resources/templates/good/cdk_synthesized_without_analytics.yaml diff --git a/src/Cargo.lock b/src/Cargo.lock index ceb9ae08..89323dc0 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -1690,6 +1690,8 @@ dependencies = [ name = "resources" version = "1.14.0" dependencies = [ + "cloudformation-validate-diagnostics", + "cloudformation-validate-rules", "serde_json", ] diff --git a/src/cfn-validate/tests/context_metadata.rs b/src/cfn-validate/tests/context_metadata.rs index ebdcf455..a21efece 100644 --- a/src/cfn-validate/tests/context_metadata.rs +++ b/src/cfn-validate/tests/context_metadata.rs @@ -60,12 +60,24 @@ fn complete_context_is_clean_on_every_engine() { assert!(diagnostics.is_empty(), "complete context and exempt resources must not be flagged: {diagnostics:?}"); } +/// Context describes the deployed resources whatever produced the template, so a +/// synthesized template is checked like any other; only the CDK analytics +/// record is exempt from the requirement. #[test] -fn cdk_template_marked_only_by_construct_paths_suppresses_context_rules() { - let diagnostics = - context_diagnostics_on_every_engine("good/cdk_synthesized_without_analytics.yaml", ValidateConfig::default()); +fn cdk_synthesized_template_is_checked_except_for_its_analytics_record() { + let diagnostics = context_diagnostics_on_every_engine( + "bad/I4010_cdk_synthesized_missing_context.json", + ValidateConfig::default(), + ); - assert!(diagnostics.is_empty(), "context rules are not actionable on a synthesized template: {diagnostics:?}"); + let rule_ids: Vec<&str> = diagnostics.iter().map(|d| d.rule_id.as_str()).collect(); + assert_eq!(rule_ids, ["W4011", "I4010", "I4010"], "{diagnostics:?}"); + assert_eq!(diagnostics[0].resource_logical_id(), Some("OrderTopic")); + assert_eq!( + diagnostics[2].message, + "Resources without a Metadata.com.aws.cloudformation.Context block: OrderQueue (AWS::SQS::Queue), OrderHandler (AWS::Lambda::Function)." + ); + assert!(diagnostics.iter().all(|d| !d.message.contains("CDKMetadata"))); } #[test] diff --git a/src/cfn-validate/tests/snapshot_tests.rs b/src/cfn-validate/tests/snapshot_tests.rs index 9c296180..d56ac899 100644 --- a/src/cfn-validate/tests/snapshot_tests.rs +++ b/src/cfn-validate/tests/snapshot_tests.rs @@ -6,6 +6,7 @@ use composite_engine::CompositeEngine; use data_source::embedded::{CFN_LINT_VERSION, RESOURCE_SCHEMA_VERSION}; use diagnostics::DetailLevel; use rego_engine::RegoEngine; +use resources::exclude_snapshot_rules; use rules::Severity; use schema_validator::SchemaValidator; use validation_engine::{ @@ -22,7 +23,9 @@ fn validate_to_json( let config = ValidateConfig { detail_level: detail_level.clone(), severity_level: Severity::Debug, ..Default::default() }; let report = validate_bytes_with_path(engine, &sv, bytes, config, relative_path.to_string()).expect("validate"); - serde_json::to_value(report.to_report(detail_level)).expect("serialize") + let mut json = serde_json::to_value(report.to_report(detail_level)).expect("serialize"); + exclude_snapshot_rules(&mut json).expect("exclude snapshot rules"); + json } fn strip_enrichment_fields(val: &mut serde_json::Value) { diff --git a/src/resources/Cargo.toml b/src/resources/Cargo.toml index cd391c73..aba5382e 100644 --- a/src/resources/Cargo.toml +++ b/src/resources/Cargo.toml @@ -18,6 +18,8 @@ name = "generate_validation_reports" path = "examples/generate_validation_reports.rs" [dependencies] +diagnostics = { workspace = true } +rules = { workspace = true } serde_json = { version = "1", features = ["preserve_order"] } [lints] diff --git a/src/resources/examples/generate_validation_reports.rs b/src/resources/examples/generate_validation_reports.rs index df566331..df71bcab 100644 --- a/src/resources/examples/generate_validation_reports.rs +++ b/src/resources/examples/generate_validation_reports.rs @@ -25,7 +25,7 @@ use std::sync::atomic::{AtomicUsize, Ordering}; use std::time::Instant; use resources::{ - TEMPLATES_PER_CHUNK, discover_snapshot_chunks, discover_snapshot_templates, expected_dir, + TEMPLATES_PER_CHUNK, discover_snapshot_chunks, discover_snapshot_templates, exclude_snapshot_rules, expected_dir, legacy_validation_reports_file, resources_root, snapshot_chunk_filename, templates_dir, workspace_root, }; use serde_json::{Map, Value}; @@ -280,7 +280,13 @@ fn validate_template(cfn_validate: &PathBuf, template: &str) -> (Outcome, f64) { return (Outcome::Parity(divergences), cli_validation_ms); } - (Outcome::Persist(strip_output_only_fields(reference)), cli_validation_ms) + // Parity above covered every rule; only the persisted report leaves out the + // rules that would otherwise appear on nearly every template. + let mut persisted = strip_output_only_fields(reference); + if let Err(message) = exclude_snapshot_rules(&mut persisted) { + return (Outcome::Fatal(format!("{template}: {message}")), cli_validation_ms); + } + (Outcome::Persist(persisted), cli_validation_ms) } /// Invoke `cfn-validate